в каком-то контексте я задал вопрос о запросе 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 могут содержать несколько идентификаторов и имя.
Теперь я хочу отображать информацию пользователя на другой странице, я использовал тот же запрос, но с WHERE glpi_users.id = ?
получить идентификатор от users.php?id=x
Все работает отлично, кроме создателя и пользователей, поскольку WHERE glpi_users.id = x
выбирает только одного человека.
Я бы хотел, чтобы он отображался тогда, как в предыдущем запросе, заблаговременно
EDIT: Пробовал решение 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
он покажет номер 789 билета, который создается пользователем 870 с пользователем 1180 и 1632, отвечающим за этот билет …
Вместо фильтрации на точный идентификатор пользователя, вы должны проверить, связан ли пользователь с проблемой, например:
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>
вы можете <youruserid>
идентификатор пользователя. Этот запрос вернет все проблемы, о которых сообщает этот пользователь (тип = 1). Но для всех этих проблем все связанные пользователи будут возвращены, поэтому ваш результат запроса все еще будет завершен.