PHP Mysql Left Join
<?php
$q = mysql_query("SELECT sub_cat.*, links.*
FROM links
LEFT JOIN sub_cat
ON links.p_id = sub_cat.id
WHERE sub_cat.p_id = '$id'
ORDER BY name ASC") or die (mysql_error());
while ($r = mysql_fetch_assoc($q))
{
$links_name = $r['name'];
$link_h3 = $links_name != '' ? '<h3>' . $links_name . '</h3>' : '';
//print $link_h3;
print '<pre>';
print_r ($r);
}
?>
Ich habe zwei Tabellen mit Zeilen wie:
sub_cat
- id
- Namen
- p_id
links
- id
- links
- p_id
In der sub cat-i-Film-Kategorien, wie fremdsprachige Filme nationale Filme, nicht kategorisierter Filme und so weiter. In der Tabelle links habe ich konkrete Film verbindet und je nach Unterkategorie.
Die einzige Sache ist, dass ich nicht wollen, vervielfältigt Titel (sub_cat.name).
Ergebnis:
Ohne Kategorie www.moviesite.com
Ohne Kategorie www.moviesite2.com
Ohne Kategorie www.moviesite3.com
Ausländische Filme www.moviesite1.bla
Ausländische Filme www.moviesite2.bla
Ich will
Ohne Kategorie www.moviesite.com
www.moviesite2.com
www.moviesite3.com
Ausländische Filme www.moviesite1.bla
www.moviesite2.bla
und haben noch keine Idee, wie dies zu tun 🙁
jede Hilfe dankbar.
- die Abfrage ist schon in Ordnung. Sie sollten es tun, auf der Anwendungsebene. speziell auf diesen Teil:
while ($r = mysql_fetch_assoc($q)){...}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun den job, Sie haben 2 Lösungen:
Die erste Lösung ist, um Ihre Daten zu verarbeiten, bevor es zu zeigen, um alle Filme von der Kategorie.
Die Sie tun können, zum Beispiel:
Und dann, Sie können nun iterativ auf das neue array wie
Die zweite Lösung ist das ändern der SQL-Abfrage, um eine Gruppe direkt alle Filme, die in die gleiche Kategorie. Sie müssen nur nutzen ein
GROUP BY
Klausel aufsub_cat.id
und wenden Sie dann eine agregate-Funktion auf alle anderen Felder in der select.Für performance-Aspekt, die beste Lösung ist die SQL-Lösung, aber Sie tun es mit PHP geben Ihnen mehr Flexibilität für die Präsentation.
Probieren Sie etwas wie: