У меня 3 таблицы mySql:
shop
id1 shop_name
1 shop1
2 shop2
3 shop3
queue_number
id2 id_shop queue_current_number
1 1 32
2 2 56
3 3 22
queue_customer
id3 id_queue your_number
1 1 33
2 1 34
3 1 35
4 2 57
Я начинаю с этого вопроса:
SELECT *
FROM shop
LEFT JOIN queue_number ON queue_number.id_shop = shop.id1
WHERE id_shop = 1
GROUP BY id2
Мои результаты:
shop1> queue_current_number = 32
shop2> queue_current_number = 56
shop3> queue_current_number = 22
Я бы хотел получить такой результат:
shop1> queue_current_number = 35
shop2> queue_current_number = 57
shop3> queue_current_number = 22
Спасибо!
Я предполагаю, что вы ищете наивысшую ценность, либо предпочитая queue_customer над queue_number (используйте COALESCE...), либо желая максимальный максимум из двух (используйте IF (COALESCE...).
SELECT COALESCE( c.your_number, n.queue_current_number )
/* or maybe you want IF( COALESCE( c.your_number, 0 ) > COALESCE( n.queue_current_number, 0 ), c.your_number, n.queue_current_number ) */
FROM shop s
LEFT JOIN queue_number n ON s.id1 = n.id_shop
AND NOT EXISTS( SELECT * FROM queue_number n2
WHERE n.id_shop = n2.id_shop
AND n.queue_current_number < n2.queue_current_number )
LEFT JOIN queue_customer c ON n.id2 = c.id_queue
AND NOT EXISTS( SELECT * FROM current_number c2
WHERE c.id_queue = c2.id_queue
AND n.your_number < n2.your_number )
WHERE s.id_shop = 1
Попробуйте это с подзапросом:
SELECT shop.id1, shop.name, COALESCE(younumber,queue_current_number) as q_current_number
FROM shop
LEFT JOIN queue_number ON queue_number.id_shop = shop.id1
left join
(select id_queue,max(your_number) as younumber
from queue_customer group by id_queue)c on c.id_queue= shop.id1
WHERE id_shop = 1