Verschachteln von Datenbankabfragen

jojojan

Mitglied
Verschachteln von mysql Datenbankabfragen

Hallo alle zusammen da bin ich wieder ;)
Ich hab mir nun bei ebay auch so ein Auktionshaus Script gekauft weil ich damit mal ein wenig rum experimentieren wollte.
Jetzt hab ich aber ein kleines Problem, ich hätte gerne das wenn ich auf eine Oberkategorie klicke, das er mir auch alle Artikel aus den Unterkategorien anzeigt.
Denn momentan ist es so das ich mich bis zur Unterkategorie durchklicken muss um mal ein paar Artikel zu sehen.
Und zwar liest er die Artikel mit folgendem Code aus:

PHP:
 SELECT * FROM auctions WHERE category='$id' AND closed='0'

So dabei ist die id nur die id von der Unterkategorie.
Und zwar müsste ich um von der Oberkategorie die Artikel die eine Kategorie tiefer sind zu sehen folgenden Code noch dazu benutzen.

Code:
SELECT `cat_id` FROM `categories` WHERE `parent_id` = "$id"

Und die Zahl die da ausgegeben wird muss dann wieder als $id benutzt werden damit ich die Artikel auslesen kann.

Und um noch eine Kategorie tiefer zukommen bräuchte ich:

Code:
  SELECT `cat_id` FROM `categories` WHERE `parent_id` =  Die Zahl von der zweiten Abfrage

und immer so weiter.
Ich weiß das klingt alles sehr kompliziert und deshalb wäre ich auch für jede hilfe dankbar.
Ich hoffe ihr könnt mir ein paar Tipps geben.
Gruß
Euer nerviger jojojan ;)
 
Zuletzt bearbeitet:
Also ich hab das hier nochmal versucht etwas deutlischer dazustellen.
PHP:
SELECT * FROM auctions WHERE category='$id' AND closed='0' OR category="`cat_id` FROM `categories` WHERE `parent_id` = "$id"" AND closed='0' OR category="`cat_id` FROM `categories` WHERE `parent_id` =  Die Zahl von der zweiten Abfrage"...

Ich hoffe ihr könnt mir jetzt helfen.
Ich wäre wirklich für jeden Tip dankbar auch für ganz kleine ;)
Gruß jojojan
 
Also ich hab jetzt eine Möglichkeit gefunden nur die ist leider nicht sehr elegant,
PHP:
 $query = '
    SELECT `cat_id` FROM `categories` WHERE `parent_id` = "'.$id.'" LIMIT 1
    ';
$result = mysql_query($query)
    or die(mysql_error());
while( $row = mysql_fetch_assoc($result) ) {
	
	$cat1 = $row["cat_id"];
	}
das führe ich jeweils zwanzig mal aus bis $cat1-20 und Limit 1-20.
Danach kommt:
PHP:
 $query = '
    SELECT `cat_id` FROM `categories` WHERE `parent_id` = "'.$cat1.'" LIMIT 1
    ';
$result = mysql_query($query)
    or die(mysql_error());
while( $row = mysql_fetch_assoc($result) ) {

	$undercat1 = $row["cat_id"];
	}

Das führe ich wieder zwanzig mal aus bis $undercat1-20 und Limit 1-20.
Danach wird dann das $cat1 durch $cat2 ersetzt und es geht immer so weiter.
Ihr seht also das es eine ziemlich lange und große Datei wird. Das Problem ist einfach dass sich hinter $id und $cat mehrere Zahlen verstecken, deswegen das mit dem Limit damit immer nur eine Zahl ausgegeben wird.

Hat jemand eine Idee wie ich mir diese riesige Abfrage sparen kann und mehrere Zahlen in eine Variable kirege?

Gruß jojojan
 
Vielen Dank für die Antwort.
Ich hab zwar noch nicht genau verstanden wie ich das ganze anwenden kann,aber ich lese mich mal da durch ;)
 
Ich glaub ich bin langsam echt am verzweifeln. Mittlerweile wäre ich sogar bereit dafür zu bezahlen wenn mir jemand verrät wie ich mehrere Zahlen in eine Variable krieg und er mir die dann auch richtig ausliest.
Da es jetzt schon spät ich gehe ich mich in den schlaf weinen :(.

;)
 
Ich glaub ich bin langsam echt am verzweifeln. Mittlerweile wäre ich sogar bereit dafür zu bezahlen wenn mir jemand verrät wie ich mehrere Zahlen in eine Variable krieg und er mir die dann auch richtig ausliest.
Da es jetzt schon spät ich gehe ich mich in den schlaf weinen :(.

;)

http://de.php.net/manual/de/function.serialize.php
http://de.php.net/manual/de/function.unserialize.php

Und dann einfach eine Liste mit allen Unterkategorien speichern.
 
Viele Dank für eure Antworten und die Hilfe.
Aber irgendwie blick ich da nicht durch :(.
Deswegen hab ich mir jetzt eine andere Lösung ausgedacht die aber leider nicht ganz so funktioniert wie ich mir das vorstelle.
Und zwar lese ich die id jetzt wie folgt aus:
PHP:
$res = mysql_query("SELECT cat_id FROM categories WHERE parent_id = '$id' ORDER BY 'cat_id' DESC");
while($row = mysql_fetch_array($res))
echo"category='$row[cat_id]' AND closed='0' OR";
Das klappt auch wunderbar :)
Dann kommt nämlich das dabei raus:
PHP:
category='20' AND closed='0' ORcategory='21' AND closed='0' ORcategory='22' AND closed='0' ORcategory='23' AND closed='0' ORcategory='24' AND closed='0' ORcategory='1667' AND closed='0' ORcategory='1813' AND closed='0' ORcategory='1670' AND closed='0' ORcategory='1822' AND closed='0' ORcategory='1828' AND closed='0' OR
Und das ist genau das was ich wollte :):):)
ABEEEEEEEEEEEER:
Wenn ich das jetzt in eine Variable packe damit ich das weiter benutzen kann also so:
PHP:
$testo ="category='$row[cat_id]' AND closed='0' OR";

Spuckt er mir nur:
PHP:
category='1828' AND closed='0' OR
aus.

Gibts da einen trick damit er die Variable so wie oben mit allen zahlen ausspuckt?
Weil diese Variable muss nämlich dann hier eingefügt werden:
PHP:
 $result = mysql_query ( "SELECT * FROM auctions WHERE category='$id' AND closed='0' OR $testo
damit er alle id´s ausliest.

Also ich find ich bin schon recht weit gekommen :)
Jetzt fehlt mir nur noch eure professionelle hilfe wie ich das mit der Variablen noch lösen kann ;)
 
Du müstest das dann mit einer Schleife machen und das "neue" ID-Kriterium an das "alte" anhängen ala:
SChleifen kannst du dir eine Aussuchen, foreach, for etc. Anhängen tust du mit dem "."-Operator:
PHP:
$test="Hallo";
$test.=" Du";
echo $test; --> Hallo Du
 
Huhu,
schon mal vielen Dank dafür.
Aber kannst du mir mal bitte kurz dabei helfen?
Ich bin noch nicht ganz wach und steh aufen Schlauch.
Ich hab das jetzt so gemacht:
PHP:
$testo = array("category='$row[cat_id]' AND closed='0' OR ","category='$row[cat_id]' AND closed='0' OR ");
foreach ($testo as $test) {
print($test."\n");}

und rauskommt:
PHP:
category='1828' AND closed='0' OR category='1828' AND closed='0' OR
Also nicht ganz so das was ich will ;).
Und nicht die nerven verlieren mein Gehirn schläft wohl noch ;)
 

Neue Beiträge

Zurück