PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [MySQL]: Zwei DBs gleichzeitig abfragen geht prinzipiell, aber eben nicht richtig


mf_2
2007-09-21, 10:56:03
Hallo,

Ich habe folgende Abfrage:

$sql="SELECT count(*) FROM eins.test1, zwei.test2";
$result = mysql_query($sql);
while($aDatensatz = mysql_fetch_row($result))
{
print_r($aDatensatz);
}


Dieser soll alle Zeilen in test1 aus der DB eins und alle Zeilen in test2 aus der DB zwei zählen. Was er aber leider nun macht, ist folgendes: Er holt die erste Zeile aus test1, dann alle aus test2, dann holt er die zweite Zeile aus test1 und wieder alle aus test2 etc usw. Warum ist das so?
Damit komme ich statt auf 1001 Zeilen (501 in test1 und 500 in test2) auf 250500 Zeilen. Wenn man statt dem count(*) einfach nur ein * setzt sieht man es am zurückgegebenen Array ganz deutlich dass er so zählt wie ich es oben beschrieben habe.

Könnt ihr mir da weiterhelfen? Achja, das MUSS in einer Anweisung passieren, aufsplitten auf zwei ist nicht, sorry.

Gast
2007-09-21, 11:58:57
Warum ist das so?


Liegt am Kreuzprodukt, welches hier gebildet wird. Bei einer Tabelle A mit x Zeilen und j Spalten und einer Tabelle B mit y Zeilen und k Spalten, bekommst du eben eine temporäre Tabelle mit j+k Spalten und x*y Zeilen als Ergebnis.

Reicht es denn bei deiner Lösung aus, wenn das Ergebnis nicht als Summe in einer Spalte, sondern einzeln auf 2 Spalten ausgegeben wird? Durch den Einsatz von DISTINCT müssten die beiden Spalten test1 und test2 Schlüsselspalten sein.


SELECT COUNT (DISTINCT eins.test1), COUNT (DISTINCT zwei.test2)
from eins, zwei;

Matrix316
2007-09-21, 12:19:02
So sollte es gehen:


SELECT SUM(XXX) AS Summe
FROM (
SELECT COUNT(*) AS XXX
FROM eins.test1
UNION
SELECT COUNT(*) AS XXX
FROM zwei.test2
) XXX

medi
2007-09-21, 14:05:18
davon ab wieso macht du ne whileschleife zur ausgabe? du bekommst doch sowieso nur einen datensatz zurück und zwar die anzahl.


$result = mysql_query($sql);
$aDatensatz = mysql_fetch_array($result))
echo $aDatensatz[0];


oder


$result = mysql_query($sql);
list($aDatensatz) = mysql_fetch_row($result);
echo $aDatensatz;


häts auch getan