2010-03-14 8 views
0

Disons que j'ai une liste tableau marques ou modèles de véhicules:Joindre deux tables (à travers un lien), un qui peut produire plusieurs lignes, en un seul résultat

Voitures:

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

Et j'ai aussi une autre table qui relie les fonctionnalités.
Lien:

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

J'ai la table la liste des caractéristiques.
Caractéristiques:

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

Je veux énumérer ces résultats sur ma page d'accueil comme celui-ci:

BMW

  • A/C
  • 4 roues motrices

Audi

  • 4WD

Volvo

  • A/C
  • 4WD
  • sièges chauffants

Quelle est la meilleure façon de faire cela (en utilisant PHP et MySQL)?


Modifier: Je pense que je vais revoir ma base de données Cars pour ressembler à ceci:

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

Et puis chercher Features avance et combiner en PHP. Je suppose que c'est beaucoup plus facile, et je n'ai pas de problème si j'ai une marque sans fonctionnalité.

Répondre

1
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 

Cela devrait être la requête, puis utilisez mysql_fetch_array et imprimer les résultats

<?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>";  
    } 
?> 
+0

Mais cela ne me donner le premier long métrage, et pas tous puisque nous groupant, non? Donc je dois 'GROUP BY features' et ensuite avec PHP parcourir les résultats pour obtenir chacun des résultats avant de passer à la marque suivante ou quelque chose? Une idée sur la façon de rendre cela plus simple? – Eikern

+0

oh à droite, je suis désolé, utilisez ordre au lieu de groupe par et que de passer à travers le résultat en utilisant un cicle ... J'ai mis à jour le poste, lisez maintenant ... – Marcx