Zum Inhalt springen
ThreadPHP & MySQL

Mysql abfrage (Join) in PHP Array()

Kategorie
PHP & MySQL
Gelesen
2257
Antworten
6
Erstellt von: Themenersteller JDev Xer Content Gott (1224 Beiträge)Datum: 26.01.2010, 11:22 Uhr
Archiv-KommentarArchiviert, nicht priorisiertCMS & technische Umsetzung

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.

Zur Kategorie
Themenersteller JDev Xer Content Gott (1224 Beiträge)
am 26.01.2010, 11:22 Uhr eröffnete romacron folgenden Thread PHP & MySQL 2257 mal gelesen 6 Antwort(en).

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äge
gelöschter Benutzer
am 26.01.2010, 12:06 Uhr schrieb
Antwort

Hallo 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

gelöschter Benutzer
am 26.01.2010, 12:11 Uhr schrieb
Antwort

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

JDev Xer Content Gott (1224 Beiträge)
am 26.01.2010, 12:12 Uhr schrieb romacron
Antwort

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

JDev Xer Content Gott (1224 Beiträge)
am 26.01.2010, 12:17 Uhr schrieb romacron
Antwort

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

gelöschter Benutzer
am 31.01.2010, 12:34 Uhr schrieb
Antwort

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

JDev Xer Content Gott (1224 Beiträge)
am 31.01.2010, 12:37 Uhr schrieb romacron
Antwort

Hallo peete!

Vielen Dank, dachte ich hätte einen Befehl nicht im Kopf. tmpTable kommt leider nicht in Frage.