Есть две таблицы users
и ticket
. В users
хранится информация о пользователях. В ticket
хранятся заявки пользователей. Информация о заявителе и исполнителе хранится в виде ID
пользователя из таблицы users
. Все это богатство вывожу в таблицу запросом, где отображается исполнитель (ФИО):
$ticket = array();
$select_ticket = $dbquery->prepare("SELECT id_ticket, tic_id_rand,
ticket_title, id_status, status_name, name_service,
ticket_date_open,
ticket_deadline, name_prio, first_name, middle_name,
surname,
ticket_executor
FROM ticket, users, ticket_status, priority, service
WHERE ticket.ticket_status=ticket_status.id_status AND
ticket.ticket_executor=users.users_id AND
ticket.ticket_service=service.id_service AND
ticket.ticket_priority=priority.id_prio");
$select_ticket->execute();
while($row = $select_ticket->fetch(PDO::FETCH_ASSOC)) {
$ticket[] = $row;
}
return $ticket;
В таблице выводится все как надо. Но встал вопрос, необходимо дополнительно выводить поле Заявитель
. Пробовал добавить:
ticket.ticket_customer=users.user_id
Такой вариант в запросе не работает. В таблице users
хранится только ФИО
пользователя. А в таблице ticket
поля имеют такой вид: Исполнитель - ticket_executor
, Заявитель ticket_customer
.
То есть получается мне надо дважды провести сравнение разных столбцов из ticket
с одним столбцом в users
Можно ли как-то решить эту проблему?
Необходимо в таком случае использовать соединения между таблицами
$sql = "SELECT user1.login, user2.login
FROM `tickets` tickets
LEFT JOIN `users` user1 ON user1.id = tickets.executor_id
LEFT JOIN `users` user2 ON user2.id = tickets.customer_id
";
В таком случае, можно тянуть инфу которая соединяется по разным полям в tickets.
--
$sql = "SELECT id_ticket, tic_id_rand, ticket_title,
id_status, status_name, name_service, ticket_date_open,
ticket_deadline, ticket_executor,
user_executor.name_prio,
user_customer.name_prio
FROM ticket ticket,
ticket_status ticket_status,
priority priority,
service service
LEFT JOIN `users` user_executor ON user_executor.id = ticket.ticket_executor
LEFT JOIN `users` user_customer ON user_customer.id = ticket.ticket_customer
WHERE ticket.ticket_status=ticket_status.id_status
AND
ticket.ticket_executor=users.users_id
AND
ticket.ticket_service=service.id_service
AND
ticket.ticket_priority=priority.id_prio";
Всем спасибо. Натолкнули на правильное решение.
SELECT T.id_ticket, T.tic_id_rand, T.ticket_title, id_status,
status_name, name_service, T.ticket_date_open, T.ticket_deadline,
name_prio, U1.first_name as u1_first_name, U1.middle_name, U1.surname,
U2.first_name as u2_first_name, U2.middle_name, U2.surname FROM users
U1, users U2, ticket T, ticket_status, priority, service WHERE
T.ticket_status=ticket_status.id_status AND
T.ticket_executor=U1.users_id AND T.ticket_customer=U2.users_id AND
T.ticket_service=service.id_service AND
T.ticket_priority=priority.id_prio
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу плагин под впВ каждом посте есть метабокс и чекбоксами (пока сделал только один чекбокс)
Записывал данные в бд, русские символы как обычно превращались в "кракозябру"Дописал строчку