2011-06-07 5 views
0

Je suis nouveau sur php et j'ai pensé que ce serait facile parce que j'ai réussi à faire beaucoup plus de choses difficiles auparavant avec php, mais je me suis bloqué. Apprécierions si quelqu'un pourra me aider ..Php, Mysql. Générer une table basée sur un tableau multidimensionnel

Par exemple, j'ai trois tables:

  • 1ère table Je détiens les noms de nourriture (il est table sous-catégorie)
  • 2e tableau I attente type de la nourriture (il est table de catégorie)
  • 3ème table, je tiens ce que chaque personne par id aime manger (table principale, liée à deux autres)

TblFood:

  1. Food_ID;
  2. Food_name

TblTypes:

  1. type_id;
  2. TYPE_NAME

TblLikes:

  1. person_id;
  2. Food_ID;
  3. type_id

Ces tableaux ne sont que des exemples que je tiens, mais je pense qu'il sera plus facile de comprendre ce que je veux poser. J'ai donc besoin que je sois capable de sortir des types de nourriture et des noms exacts d'aliments liés à ces types, basés sur TblLikes. Par exemple, si je choisis personne avec id person_id = '1' Je dois sortie »

Personne 1 aime:

FRUIT

  • pommes
  • bananes
  • pêches
  • pastèque

LÉGUMES

  • pommes de terre
  • oignons

VIANDE

  • dinde
  • porc

etc.

  • Un autre nom de l'aliment lié au type ci-dessus

Donc, fondamentalement, j'ai besoin de ce type de nourriture et le nom de la nourriture seront associés les uns aux autres en fonction de TblLikes.

Voilà comment je l'ai fait tout à ce jour:

mysql_select_db($database_localhost, $localhost); 

$query_likes = " SELECT TblLikes.Person_id, TblLikes.Type_ID, TblTypes.Type_name, TblLikes.Food_ID, TblFood.Food_name 
FROM (TblFood RIGHT JOIN TblLikes ON TblFood.Food_ID = TblLikes.Food_ID) LEFT JOIN TblTypes ON TblLikes.Type_ID = TblTypes.Type_ID 
WHERE TblLikes.Person_id = '1' "; 
$likes = mysql_query($query_likes, $localhost) or die(mysql_error()); 
$row_likes = mysql_fetch_assoc($likes); 
$totalRows_likes = mysql_num_rows($likes); 
?> 
<table border="1" cellpadding="5" cellspacing="5"> 
    <tr> 
    <td>Types of food</td> 
    </tr> 
    <tr> 
    <?php for ($i = 1; $i <= sizeof($row_likes['Type_name']); $i++)?> 
    <td><?php echo $row_likes['Type_name'];?></td> 
    </tr> 
<?php for ($i = 1; $i <= sizeof($row_likes['Food_name']); $i++) { 
    echo $row_likes[$i]['Food_name']; 

}?> 

</table> 

Nous vous remercions à l'avance ..

Répondre

0

Il y a plusieurs façons de le faire, mais je suggère que vous devez joindre à vos 3 tables et ajoutez une clause group by pour les types, puis enregistrez-la en tant que tableau. Ensuite, vous devez exécuter un foreach à travers le tableau et sélectionner à partir de la première requête sans la clause group by, mais avec une clause where pour le type d'aliment, puis exécutez les éléments individuels via un autre foreach. par exemple. :

$query_type_likes = " 
    SELECT 
     TblLikes.Person_id, 
     TblLikes.Type_ID, 
     TblTypes.Type_name, 
     TblLikes.Food_ID, 
     TblFood.Food_name 
    FROM 
     (TblFood RIGHT JOIN TblLikes ON TblFood.Food_ID = TblLikes.Food_ID) 
     LEFT JOIN TblTypes ON TblLikes.Type_ID = TblTypes.Type_ID 
    WHERE 
     TblLikes.Person_id = '1' 
    GROUP BY 
     TblLikes.Type_ID 
"; 
$foodType = mysql_query($query_type_likes, $localhost) or die(mysql_error()); 

foreach ($foodType as $food_Type_Id => $food_Type_Data) 
{ 
    $query_food_likes = " 
     SELECT 
      TblLikes.Person_id, 
      TblLikes.Type_ID, 
      TblTypes.Type_name, 
      TblLikes.Food_ID, 
      TblFood.Food_name 
     FROM 
      (TblFood RIGHT JOIN TblLikes ON TblFood.Food_ID = TblLikes.Food_ID) 
      LEFT JOIN TblTypes ON TblLikes.Type_ID = TblTypes.Type_ID 
     WHERE 
      TblLikes.Person_id = '1' AND 
      TblLikes.Type_ID = '".mysql_real_escape_string($food_Type_Id)."' 
    "; 
    $query_food_likes = mysql_query($query_likes, $localhost) or die(mysql_error()); 

    $html = "<ul> 
       <li>$food_Type_Data['Type_name'] 
        <ul>"; 
    foreach ($query_food_likes as $food_likes_Id => $food_likes_Data) 
    { 
     $html .= " 
         <li>$food_likes_Data['Food_name']</li> 
    } 
    $html .= " 
        </ul> 
       </li> 
      </ul>"; 
} 

echo ($html); 
+0

Changé quelques lignes dans le code pour ce en raison d'erreurs d'écho: '$ html = "

  • " food_Type_Data $ [ 'TYPE_NAME'] "
      ";.. foreach ($ query_food_likes que $ food_likes_Id => $ food_likes_Data) { $ html = "
    • " food_likes_Data $ [ 'Food_name'] "
    • "... } $ html. = "
"; } ; echo ($ html); 'mais en obtenant ce type d'erreur: Avertissement: Argument invalide fourni pour foreach() in et Notice: Variable indéfinie: html – Christine

+0

Désolé pour les erreurs, l'erreur foreach que vous recevez est due au fait que j'ai fait une erreur la seconde requête.Il devrait être: '$ food_likes = mysql_query ($ query_food_likes, $ localhost) ou die (mysql_error());' – Nightwolf

Questions connexes