0

いくつかのコンテキスト MySQL リクエストについて質問しました。私の投稿はそこにあります:テーブルの結合についてのヘルプが必要

現在、それに関連する別の問題があるため、私のページでデータベースからチケットをリストしています。リクエストは次のとおりです。

"SELECT
    glpi_tickets.id,
    glpi_tickets.name,
    GROUP_CONCAT(
            CASE WHEN glpi_tickets_users.type = 1 THEN 
            CONCAT(glpi_users.firstname, ' ', glpi_users.realname)
        END) AS creator,
    GROUP_CONCAT(
        CASE WHEN glpi_tickets_users.type = 1 THEN 
            CONCAT(glpi_tickets_users.users_id)
        END) AS creator_id,
    GROUP_CONCAT(
        CASE WHEN glpi_tickets_users.type = 2 THEN 
            CONCAT(glpi_users.firstname, ' ', glpi_users.realname)
        END) AS users,
    GROUP_CONCAT(
        CASE WHEN glpi_tickets_users.type = 2 THEN 
            CONCAT(glpi_tickets_users.users_id)
        END) AS users_id,
    glpi_tickets.date,
    glpi_tickets.priority,
    glpi_tickets.date_mod,
    glpi_itilcategories.completename,
    glpi_tickets.status,
    glpi_tickets.users_id_lastupdater,
    GROUP_CONCAT(
        CASE WHEN glpi_tickets.users_id_lastupdater = glpi_users.id THEN
            CONCAT(glpi_users.firstname, ' ', glpi_users.realname) 
        END SEPARATOR '<br>') AS last_updater,
    glpi_tickets.content
    FROM
        glpi_tickets
    JOIN glpi_tickets_users ON glpi_tickets_users.tickets_id = glpi_tickets.id
    JOIN glpi_users ON glpi_users.id = glpi_tickets_users.users_id
    JOIN glpi_itilcategories ON glpi_itilcategories.id = glpi_tickets.itilcategories_id
    GROUP BY
        glpi_tickets.id"

結果は次のようになります。

[ID][Title][creator][date created][priority][category][status][date modified][assigned to][last update by]
[125][helpdesk test][admin][29-01-2013 21:09][low][messaging][new][30-01-2013 17:52][Tony][admin]

チケットごとに、作成者 (creator_id) とユーザー (users_id) に複数の ID と名前を含めることができます。

今、別のページにユーザー情報を表示したいのですが、同じリクエストを使用しましたWHERE glpi_users.id = ?が、IDを取得しましたusers.php?id=x

WHERE glpi_users.id = x1 人だけを選択するため、作成者とユーザー以外はすべて正常に動作します。

前回のリクエストのように表示する方法が欲しいです、よろしくお願いします

編集: GolezTrols ソリューションを試しましたが、機能していません。これが私のクエリです:

"SELECT
                        glpi_tickets.id,
                        glpi_tickets.name,
                        GROUP_CONCAT(
                            CASE WHEN glpi_tickets_users.type = 1 THEN 
                                CONCAT(glpi_users.firstname, ' ', glpi_users.realname)
                            END) AS creator,
                        GROUP_CONCAT(
                            CASE WHEN glpi_tickets_users.type = 1 THEN 
                                CONCAT(glpi_tickets_users.users_id)
                            END) AS creator_id,
                        GROUP_CONCAT(
                            CASE WHEN glpi_tickets_users.type = 2 THEN 
                                CONCAT(glpi_users.firstname, ' ', glpi_users.realname)
                            END) AS users,
                        GROUP_CONCAT(
                            CASE WHEN glpi_tickets_users.type = 2 THEN 
                                CONCAT(glpi_tickets_users.users_id)
                            END) AS users_id,
                        glpi_tickets.date,
                        glpi_tickets.priority,
                        glpi_tickets.date_mod,
                        glpi_itilcategories.completename,
                        glpi_tickets.status,
                        glpi_tickets.users_id_lastupdater,
                        GROUP_CONCAT(
                            CASE WHEN glpi_tickets.users_id_lastupdater = glpi_users.id THEN
                                CONCAT(glpi_users.firstname, ' ', glpi_users.realname) 
                            END SEPARATOR '<br>') AS last_updater,
                        glpi_tickets.content
                    FROM
                        glpi_tickets
                        JOIN glpi_tickets_users ON glpi_tickets_users.tickets_id = glpi_tickets.id
                        JOIN glpi_users ON glpi_users.id = glpi_tickets_users.users_id
                        JOIN glpi_itilcategories ON glpi_itilcategories.id = glpi_tickets.itilcategories_id
                    WHERE
                       exists (
                            SELECT 
                              'x' 
                            FROM
                              glpi_tickets_users
                            WHERE
                            glpi_tickets_users.tickets_id = glpi_tickets.id AND
                            glpi_tickets_users.id = ? AND
                            glpi_tickets_users.type = 1)
                    GROUP BY
                        glpi_tickets.id"

ほとんどの場合、チケットはまったく表示されません。また、チケットは表示されますが、ユーザーとは関係がない場合もusers.php?id=1536あります。このチケットの…

4

1 に答える 1

1

正確なユーザー ID でフィルタリングする代わりに、次のように、ユーザーが問題に関連しているかどうかを確認する必要があります。

select
  t.title,
  group_concat(
    case when tu.type = 1 then 
      concat(u.firstname, ' ', u.lastname)
    end) as creator,
  t.priority,
  t.date,
  group_concat(
    case when tu.type = 2 then 
      concat(u.firstname, ' ', u.lastname)
    end SEPARATOR ' - ') as users
from
  tickets t
  inner join tickets_users tu on tu.ticketid = t.id
  inner join users u on u.id = tu.userid
where 
  exists (
    select 
      'x' 
    from 
      tickets_users tu2 
    where 
      tu2.ticketid = t.id and 
      tu2.userid = <youruserid> and 
      tu2.type = 1)
group by
  t.id;

<youruserid>必要なユーザー ID を入力できます。このクエリは、そのユーザー (タイプ = 1) によって報告されたすべての問題を返します。ただし、これらすべての問題について、関連するすべてのユーザーが返されるため、クエリの結果はまだ完全です。

于 2013-07-20T23:29:10.780 に答える