Problem mit einer SQL Abfrage(2 Kriterien als Array ausgeben)

lerel

Grünschnabel
Hallo!

Ich habe ein Problem bei einer SQL Abfrage, in welcher ich Daten in ein Array Speichern will!

Und zwar, geht es darum, dass ich eine MySQL Tabelle habe, in der es die Spalten: position und linkID gibt.

linkID, ist regulär, null, wenn jedoch ein Kind von einem Eintrag angelegt, wird, erhält linkID, die ID des Eintrages, z.B.:

Beispiel (ID: 1; linkID: 0)
-Kind von Beispiel(ID: 2; linkID: 1)


position gibt die Position in der jeweiligen Stufe an, welche durch linkID angegeben wird, z.B.:


Beispiel 1 (ID: 1; linkID: 0; position: 1)
-Kind 1 von Beispiel 1(ID: 2; linkID: 1; position: 1)
-Kind 2 von Beispiel 1(ID: 3; linkID: 1; position: 2)
-Kind 3 von Beispiel 1(ID: 4; linkID: 1; position: 3)
Beispiel 2 (ID: 5; linkID: 0; position: 2)
-Kind 1 von Beispiel 2(ID: 5; linkID: 5; position: 1)


Das Problem besteht, darin dass ich dieses als Array ausgeben würde.

Mein "Versuch" eine SELECT Abfrage zu basteln:

SELECT * FROM links ORDER BY position and linkID

Ich habe schon viel ausprobiert, ich komme zu keinem Ergebnis.

Ich habe auch schon überlegt, den Array danach nochmal zu sortieren, am wichtigsten ist es, eben das jedoch die Einträge im Array genau in der korrekten Reihenfolge sind, also nicht erst alle mit position=1, dann alle mit position=2, sondern, eben die fertige Sortierung.

Ich hoffe ihr könnt mir helfen, ich hänge an dem Problem jetzt schon mehrere Tage fest.

Vielen Dank!

Grüße
Michael
 
also du willst ein array das so aussieht?:

PHP:
Array(
	0 => array(
			0 => 'Beispiel 1' ,
			1 => 'kind 1'
			2 => 'kind 2'
		)
	)
	3 => array(
			'Beispiel 2' ,
			4 => 'kind 1'
			5 => 'kind 2'
		)
	)
)

dann wäre der php-code in etwa so:

PHP:
$qry = mysql_query("SELECT * FROM `links` ORDER BY `ID`");
while($fetch = mysql_fetch_array($qry)) {
	if($fetch['linkID'] == 0) {
		$array[$fetch['ID']][0] = $fetch['name'];
	}
	else {
		$array[$fetch['linkID']][$fetch['ID']] = $fetch['name'];
	}
}
 
Hallo!

Danke für deine Antwort!

Ich habe noch vergessen dazu zu schreiben, dass es keine Begrenzung der Ebenen Tiefe geben soll, also man soll z.B. von Kindern noch weiter Kinder erstellen können.

Das Array soll wie folgt aussehen:

PHP:
array(

0=> array("Datensatz von Beispiel, also Name, ID, etc.")

1=> array("Datensatz von Kind 1 von Beispiel")

2=> array("Datensatz von Kind 2 von Beispiel")

3=> array("Datensatz von Beispiel 2")

4=> array("Datensatz von Kind 1 von Beispiel 2")

)

Ich persönlich habe mir heute früh noch überlegt, dass ganze über eine Funktion zu machen, vorerst noch, ein paar Bemerkungen:

Ich habe eine eigene DB Klasse, $db->data() liefert ein Array aus dem aktuellen Query zurück!
PHP:
function test($query)
{
  $daten = $db->data($query);

  if($daten)
  {
    foreach($daten as $key => $out)
    {

    $rueckgabetest.=$out['name'];

    test("SELECT * FROM links WHERE linkID='".$out['id']."' ORDER BY position");
    }
  }

  return $rueckgabetest;
}

echo test("SELECT * FROM links WHERE linkID='0' ORDER BY position");

Hierbei werden jedoch erst alle Datenelemente mit dem Wert linkID=0 ausgeben, dann darunter die Kinder von ID=1, also alle Datenelemente mit dem Wert linkID=1 etc.

Grüße
Michael
 
Zurück