romacron
Themenersteller
JDev Xer
Content Gott (1224 Beiträge)

Mysql abfrage (Join) in PHP Array()

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




masa8
Avatar masa8
Selbständig
Content Gott (1001 Beiträge)
am 26.01.2010, 12:06 Uhr schrieb masa8

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


Mein Blog über Wordpress, SEO, interne Verlinkung und mehr
alles-mit-links
BLACKINK Webkatalog 20-25 Backlinks "Lifetime"

willmann
Avatar willmann
TYPO3-Freelancer.
Guru (246 Beiträge)
am 26.01.2010, 12:11 Uhr schrieb willmann

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


Marc Willmann. TYPO3-Freelancer.
http://www.marc-willmann.de

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

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


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

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, möchte ich sofort die unterkategorien über deren index klicken können.

// Marc, ich wusste das Du antwortest


peete
Webdesigner
Neuling (2 Beiträge)
am 31.01.2010, 12:34 Uhr schrieb peete

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


www.writeadd.com - The Collaborative Writing Community for Authors

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

Hallo peete!

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


  • 1


« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.