Mysql abfrage (Join) in PHP Array()
Redaktionelle Einordnung
Diese archivierte Diskussion behandelt Mysql abfrage (Join) in PHP Array() aus Sicht der Rubrik PHP & MySQL.
CMS- und Technikfragen sind heute besonders dann relevant, wenn sie Indexierung, Rendering, interne Verlinkung oder Relaunch-Risiken beeinflussen.
Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.
Startbeitrag
Originaler Foreninhalt in modernisierter Darstellung.
Hallo an die Cracks! Sehe den Wald vor lauter Bäumen nicht.
Mysql , PHP
Es befinden sich 2 Tabellen in der gleichen Datenbank.
Hier das vereinfachte Modle
Table 1 (die Haupttabelle)
| id(primary) | category_name |
1 tolle_cat
2 super_cat
Table 2 (die untertabelle)
| id | main_cat_id | content |
1 1 beitrag1..
2 1 beitrag2
3 2 beitrag3
t1.id=t2.main_cat_id
Die Abfrage als Beschreibung:
Frage alle Werte der Tabelle 1 ab und sortiere aus tabell2 die dazugehörigen Inhalte mit hinein.
die bergabe an php sollte dann so aussehen:
$cat_array [ id ]
$cat_array [ id ][inhalte der kategory aus tabelle 2 die zu dieser Kategorie gehören]
quasi Table2 unter den ersten Table druntersortieren und dabei einen index nach rechts
Vielen Dank für die Mühe.
Gruss Roman
Antworten
6 BeiträgeHallo Roman,
nur mal so auf die schnelle.
t1=a, t2=b
select a.id, b.id, b.content from t1 a, t2 b where a.id=b.main_cat_id
Das Ergebnis sollte dann sein:
1. 1. beitrag1
1. 2. beitrag2
2. 3. beitrag3
Gruß Matthias
das kann so nicht gehen. Dafür brauchst Du zwei Abfragen, weil Du in die 1:n-Beziehung der Tabellen nicht so ohne weiteres in diese Richtung gehen kannst (andersherum würde es über einen LEFT JOIN gehen).
Dann also (PSEUDOCODE):
SELECT id FROM tbl1;
for each (id) {
SELECT * FROM tbl2 WHERE main_cat_id = $id
for each content as i{
$cat_array[id][i] = $result
}
}
das kann bei vielen Kategorien und vielen Einträgen in tbl2 aber ein paar Sekunden dauern. Was willst Du eigentlich genau damit erreichen - für mich hört sich das nicht nach dem optimalen Weg zu irgendwas an...
Marc
Jepp Vielen Dank, das ist klar.
Nur wird bei dieser Abfrage quasi nur Table b ausgegeben
Ziel ist aber
Tolle_cat
| _ beitrag1
| _ beitrag2
Super_cat
|_ beitrag3
...den Index für die Unterkategorien um 1 nach rechts verschieben aber die Oberkategorie als "Standalone" behalten
Vielen Dank Marc!
Das wollte ich vermeiden. Aber gut dass ich weiß, dass es keine andere Lösung gibt.
Habe das vorher auch immer so gemacht, mir tat es nur in der seele weh das nicht auf einen Rutsch zu machen.
Was will ich machen?
für jeden "Haupteintrag"
eine Zeile Ausgeben mit den "header_daten der Kategorie"
in die 2. Zeile kommen dann die dazugehörigen Inhalte von t2
wenn ich mir die bersicht lade, mchte ich sofort die unterkategorien ber deren index klicken knnen.
// Marc, ich wusste das Du antwortest
Hallo Roman,
grundsätzlich ist es natürlich möglich. Man könnte innerhalb einer SP in einem ersten Cursor die Datensätze der Tabelle eins durchlaufen und in einem zweiten Cursor verschachtelten Cursor die der zweiten Tabelle. Die Werte werden innerhalb des Cursors in eine temporäre Tabelle gespeichert und am Ende von der Prozedur zuückgegeben.
Ich hoffe, dass dir diese Lösung hilft. Meiner Meinung nach ist es aber einfacher es im PHP Code selbst zu machen.
Gruss, Oscar
Hallo peete!
Vielen Dank, dachte ich hätte einen Befehl nicht im Kopf. tmpTable kommt leider nicht in Frage.