MySQL выберите справку; Subquery? - PullRequest
0 голосов
/ 04 января 2011

У меня есть две таблицы, из которых я запрашиваю. В одной таблице есть поля, которые обозначают, является ли игрок, изображенный на фотографии, мертвым / живым, в Зале славы и т. Д. Поле, которое я только что добавил, называется "new_flag". Это означает, что фотография является новой для моего инвентаря

Без GROUP BY результаты будут выглядеть примерно так (обратите внимание, что у некоторых игроков есть более одного продукта / фотографии)

name            firstname  lastname     hall_of_fame  deceased  new_flag
----            ---------  --------     ------------  --------  --------
EARL AVERILL SR EARL       AVERILL SR   Y             Y         Y
BILL TERRY      BILL       TERRY        Y             Y         N
BILL TERRY      BILL       TERRY        Y             Y         Y
BILL TERRY      BILL       TERRY        Y             Y         N
BOBBY DOERR     BOBBY      DOERR        Y             N         N
BOBBY DOERR     BOBBY      DOERR        Y             N         N

С GROUP BY мой запрос выглядит следующим образом, но он не всегда может найти новый флаг, поскольку у каждого игрока может быть более одной записи.

SELECT    CONCAT(a.firstname,' ',a.lastname) AS name,
          a.firstname,
          a.lastname,
          b.hall_of_fame,
          b.deceased,
          b.new_flag
 FROM     vm_product_name AS a,
          vm_product_new_attribute AS b  
 WHERE    b.hall_of_fame ='Y'
   AND    a.product_id = b.product_id
 GROUP BY CONCAT(a.firstname,' ',a.lastname)
 ORDER BY a.lastname,
          a.firstname;

Проблема в том, что я хочу, чтобы каждый игрок появлялся на моей веб-странице только один раз, но ..... Я также хочу добавить значок «новый» рядом с именем игрока, если у него есть хотя бы одна новая фотография. Есть идеи, как мне это сделать?

Я знаю, что это не оптимальный способ сделать это, но он построен как расширение Joomla / Virtumart, и я не могу сейчас изменить структуру базы данных.

Ответы [ 2 ]

4 голосов
/ 04 января 2011
SELECT CONCAT(a.firstname, ' ', a.lastname) AS name, a.firstname, a.lastname,
    b.hall_of_fame, b.deceased, MAX(b.new_flag) AS new_flag
FROM vm_product_name AS a
    INNER JOIN vm_product_new_attribute AS b
        ON a.product_id = b.product_id
WHERE b.hall_of_fame = 'Y'
GROUP BY a.lastname, a.firstname
ORDER BY a.lastname, a.firstname
0 голосов
/ 04 января 2011

вместо этого вы можете захотеть присоединиться слева ...

SELECT * FROM (
SELECT CONCAT(vm_product_name.firstname, ' ', vm_product_name.lastname) AS name
vm_product_name.firstname AS firstname, 
vm_product_name.lastname, AS lastname,
vm_product_new_attribute.hall_of_fame AS hall_of_fame,
vm_product_new_attribute.deceased AS deceased, 
vm_product_new_attribute.new_flag AS new_flag
FROM vm_product_name LEFT JOIN vm_product_new_attribute ON vm_product_name.product_id = vm_product_new_attribute.product_id 
ORDER BY lastname, firstname) AS MYRESULT GROUP BY CONCAT(lastname, ' ',firstname);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...