Соединение двух таблиц (через ссылку), одна из которых может дать несколько строк, вместе в один результат - PullRequest
0 голосов
/ 15 марта 2010

Допустим, у меня есть таблица с перечнем марок или моделей автомобилей:

Автомобили

Id | Brand
-----------
1  | BMW
2  | Audi
3  | Volvo

И у меня также есть еще одна таблица, которая связывает функции.
Ссылка

Id | carid | featureid
-----------------------
1  | 1     | 1
2  | 1     | 2
3  | 2     | 2
4  | 3     | 1
5  | 3     | 2
6  | 3     | 3

И у меня есть таблица с перечнем функций.
Особенности

Id | Feature
-----------
1  | A/C
2  | 4WD
3  | Heated seats

Я хочу разместить эти результаты на моей главной странице следующим образом:

BMW

  • A / C
  • 4WD

Audi

  • 4WD

Volvo

  • 4WD
  • Подогрев сидений

Какой самый лучший / самый эффективный способ сделать это (с использованием PHP и MySQL)?


Редактировать : Я думаю, что я собираюсь изменить мою базу данных Cars, чтобы она выглядела следующим образом:

Id | Brand   | Feature
----------------------
1  | BMW     | 1,2
2  | Audi    | 1
3  | Volvo   | 1,2,3
4  | Citröen | 

А затем забрать Features заранее и объединить в PHP. Я думаю, это намного проще, и у меня не возникает проблем, если у меня есть бренд без функции.

1 Ответ

1 голос
/ 15 марта 2010
SELECT Cars.Brand As Brand, Features.Feature as Feature FROM Cars, Link, Features WHERE Cars.id = Link.carid AND Features.id = Link.featureid Order By Brand

Это должен быть запрос, затем используйте mysql_fetch_array и напечатайте результаты

<?php
  $result=mysql_query($query);
  $last='';
  while($row = mysql_fetch_array($result)){
     if($row['brand']!=$last) {
             //if the previous brand is the same don't print it out
             //otherwise save the new brand and print it out
             $last=$row['brand'];
             echo "<b>".$row['brand']."</b><br>";
             }
     echo $row['Feature'] . "<br>";    
  }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...