2009-12-23 6 views
0

Juste avant de mettre la ligne de code, laissez-moi vous expliquer ce que j'essaie de réaliser.Mysql Join, PHP

Id aime interroger une table où une page spécifique a un parent_id spécifique. Une fois que j'ai tous les résultats je voudrais alors prendre l'id de la page qui a ce parent_id spécifique et récupérer toutes ses parties relatives de la page d'une autre table.

Ensuite, je veux simplement avoir ces informations dans un tableau prêt à imprimer ...

Toute aide serait grandement appréciée ...

$q = $CONN->query("SELECT cms_page.id, cms_page.title, cms_page.slug, cms_page_part.* FROM cms_page LEFT JOIN cms_page_part ON cms_page_part.page_id=cms_page.id WHERE cms_page.parent_id='8'"); 
+0

Que fait votre code exemple actuellement? Y a-t-il une erreur ou les résultats sont-ils faux? – philfreo

+0

Il semble énumérer les quatre portefeuilles que j'ai mais alors il semble les répéter, probablement à cause des parties de page ajoutées par une jointure incorrecte peut-être? – Andy

Répondre

0

Pouvez-vous afficher les résultats de votre recherche? Autant que je peux voir votre instruction select devrait faire l'affaire en répétant les champs cms_page.id etc pour chaque partie correspondante.

Voir aussi http://www.w3schools.com/Sql/sql_join_left.asp

Ce (je l'espère) devrait résoudre votre $ row [ 'de page_part'] question:

$rows = array(); 
$result = mysql_query($sql); 
$row = mysql_fetch_assoc($result); 
while ($row) { 
    $rows[$row['title']][] = $row; // or select only the fields that you need 
    $row = mysql_fetch_assoc($result); 
} 

foreach($rows as $portfolio => $parts) { 
    // adjust for actual html rendering 
    echo '<pre>'; 
    print_r($portfolio); 
    echo "\n"; 
    $count = 0; 
    foreach($parts as $part) { 
    echo ++$count . ' - ' . $part['cms_page_part_field1'] . ' - ' . $part['cms_page_part_field2'] . "\n"; 
    } 
    echo '</pre>'; 
} 
+0

http://www.ldmgardendesign.com/portfolio.html – Andy

+0

Je voudrais que les parties de la page en tant que jeu de résultats de l'un des quatre portefeuilles ne soient pas renvoyées en tant que résultats individuels. Vous avez donc un portefeuille, puis les pages correspondantes associées en une seule ligne. – Andy

+0

Je viens de relire votre message et c'est presque comme si j'avais besoin de l'autre sens .... c.-à-d correspondant partie pour chaque cms_page.id – Andy

0

Il devrait y avoir aucun problème avec la récupération de plusieurs lignes étant donné votre requête en cours:

$sql = "SELECT cms_page.id, cms_page.title, cms_page.slug, cms_page_part.* 
FROM cms_page 
LEFT JOIN cms_page_part ON (cms_page_part.page_id = cms_page.id) 
WHERE cms_page.parent_id = '8'"; 

Vous voulez faire une boucle sur un resultset de mysql_query comme ceci:

$result = mysql_query($sql); 
if ($result) { 
    // keep track of number of portfolio items 
    $i = 1; 
    // iterate over rows 
    while($row = mysql_fetch_assoc($result)) { 
     // output data to page for each row 
     echo 'Portfolio item ' . $i; 
     echo 'Title: ' . $row['title'] . '<br />'; 
     echo 'Slub: ' . $row['slug'] . '<br /><br />'; 
    } 
} 
+0

c'est le $ row ['page_part'] qui est le peu difficile ... C'est essentiellement ce que j'aime être en mesure d'imprimer ... – Andy