MySQL Query: объединение и группировка - PullRequest
0 голосов
/ 18 сентября 2009

У меня есть простая веб-форма для регистрации в конкурсе. Каждый участник может установить флажок, чтобы иметь право выиграть один из 20 призов. После отправки формы в таблице «участники» создается строка. Для каждого проверенного приза создается строка в таблице «Записи».

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

Как мне написать эффективный запрос MySQL, чтобы легко создать такую ​​страницу (используя PHP)?

Таблица

1012 * конкурсанты *

  • ID
  • имя
  • Адрес электронной почты
  • адрес
  • город
  • состояние

запись

  • ID
  • contestant_id
  • prize_id

призы

  • ID
  • имя

1 Ответ

3 голосов
/ 18 сентября 2009
SELECT p.name AS prize, c.name AS contestant FROM contestants c
INNER JOIN entries e ON c.id = e.contestant_id
INNER JOIN prizes p ON e.prize_id = p.id
ORDER BY p.id

Это даст вам результат:

prize 1 | contestant 1.1
prize 1 | contestant 1.2
...
prize 1 | contestant 1.n
prize 2 | contestant 2.1
prize 2 | contestant 2.2
...
prize 2 | contestant 2.n
....
prize m | contestant m.n

Если вы хотите иметь такой список:

prize 1
    contestant 1.1
    contestant 1.2
    ...
    contestant 1.n  
prize 2
    contestant 2.1
    contestant 2.2
    ...
    contestant 2.n

Вы должны отформатировать результат в PHP.

Это может быть что-то вроде этого:

$old_prize = '';

$result = mysql_query(<above query>);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

    if($old_prize != $row["prize"]) {
        $old_prize = $row["prize"];
        echo "Prize: ".$row["prize"].'<br />'; 
    }

    echo $row["contestant"].'<br />;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...