ugrás a tartalomhoz

Lekérdezés több mysql táblából

lecroix · 2007. Jan. 19. (P), 21.40
Hali!

Egy olyan problémába futottam bele, hogy több táblából kellene összegyűjteni adatokat, mégpedig a következő képpen:

Pl.: A, B, C táblában autó nevek szerepelnek, van, amelyik többször is, esetleg több táblában is. A kérdés az, hogy minden név csak egyszer szerepeljen a listában. Eddig ezt hoztam össze:

$auto = mysql_query("SHOW TABLES FROM $db LIKE 'auto_neve_'");
while ($a = mysql_fetch_row($auto)) {
echo "$a[0]" . "<br>";
$eredmeny = mysql_query("SELECT cim FROM $a[0]");
while ($sor = mysql_fetch_array($eredmeny, MYSQL_NUM)) {
echo $sor[0] . "<br>";

ide kellene valami okosság!!!

}

}


Jelenleg itt tartok. A táblákat és a sorokat kiírja, most már csak az a kérdés, hogy szedjem ki az egyes példányokat.
Szerintem valami tömbbe kellene pakolni őket, mégpedig a "legbelsőbe", majd a legvégén kiíratni.

Erre szeretnék valami ötletet, javaslatot.

Az is elég lenne, ha valaki lenne szíves leírni, melyik a nekem való ARRAY függvény. A többit majd kisilabizálom. Az ARRAY_FILL-el próbálkoztam, de sikertelenül.

A php chm-es súgófájljában találtam függvényeket, pl. azt, hogy amelyik elem csak egyszer fordul elő, írja ki, az működik. De a a kérdésemre nem találtam meg a megfelelő függvényt.

Minden segítséget előre is köszönök!
 
1

Több megoldás is van

Sulik Szabolcs · 2007. Jan. 20. (Szo), 15.10
Arra, ahogy te csinálod a dolgot a legegyszerűbb az array_search használata:
az utolsó while-ban megváltoztatod a ciklusmagot + felveszel egy $autoneve tombot (mondjuk a kód elején)

while ($sor = mysql_fetch_array($eredmeny, MYSQL_NUM)) {
   if (array_seach($sor[0], $autoneve) === false) {
      $autoneve[] = $sor[0];
      echo $sor[0] . "<br>";
   }
}
Másik megoldás, hogy tekintet nélkül mindenre, belepakolod a neveket a tömbbe, majd a végén kicsit meggyúrod (ehhez használod az array_unique() függvényt).

...
   while ($sor = mysql_fetch_array($eredmeny, MYSQL_NUM)) {
      $autoneve[] = $sor[0];
   }
}
$autoneve = array_unique($autoneve);
Így minden név csak egyszer fog szerepelni a tömbödben.

Kb ennyi.
2

Majdnem...

lecroix · 2007. Jan. 23. (K), 14.16
Az első megoldással már kiírja a táblák neveit, de a táblákból, semmit.

while ($sor = mysql_fetch_array($eredmeny, MYSQL_NUM)) {
$autoneve = array();   
if (array_seach($sor[0], $autoneve) === false) {
      $autoneve[] = $sor[0];
      echo $sor[0] . "<br>";
   }
}
A második megoldás esetén "rossz argumentumok" hibával tér vissza.

Nem tudom, mi lehet a hiba. Próbálkoztam olyan "egyszerű" trükkökkel, mint a kiírási kódot áthelyezni egyik vagy másik ciklus végére, de nem igazán jött össze a dolog. A "===false"-ra nekem az Apache reklamált, ezt kicseréltem "!==false"-ra.

Mondjuk így sem működött. De köszönöm az ötletet, végül is valami ilyesmi lesz a megoldás.