MySQL Tabellen vergleichen mit.

foo

New Member
Hi,

versuche gerade mit PHP in MySQL folgenden Tabellenvergleich aufzubauen.

Wenn die Artnr. in Tabelle_D.artnr in einer von den drei Tabellen nicht vorhanden ist

Tabelle_A.artnr Tabelle_B.artnr Tabelle_C.artnr

dann echo Tabelle_D.artnr." nicht vorhanden";


Und dann das Selbe verkehrtrum... also wenn eine Artnr. aus
Tabelle_A.artnr Tabelle_B.artnr Tabelle_C.artnr nicht mehr in Tabelle_D.art vorhanden ist.

echo "Artnr... nicht vorhanden";


Danke Danke Danke für euren Support.


Gruss
 
Was hindert dich daran das über count() selbst zu entwickeln? Oder mehrere selects zu basteln? Ein bischen Eigeninitative muss da schon sein!!! ;-)
 
also ich habe es so versucht:

SELECT
tabelle_A.artnr, tabelle_B.artnr, tabelle_C.artnr, tabelle_D.artnr, FROM tabelle_A,tabelle_B,tabelle_C,tabelle_D

WHERE tabelle_D.artnr != tabelle_A.artnr OR tabelle_D.artnr != tabelle_B.artnr OR tabelle_D.artnr != tabelle_c.artnr


aber das haut nicht ganz hin
 
Es gibt in SQL für Mengen und Unterabfragen IN / ANY /etc.

Damit ließe sich der 1. Query z.B so bauen (ungetestet):

Code:
SELECT DISTINCT D.artnr 
FROM tabelle_D D
WHERE
D.artnr NOT IN (SELECT DISTINCT A.artnr FROM tabelle_A A)  OR
D.artnr NOT IN (SELECT DISTINCT B.artnr FROM tabelle_B B)  OR
D.artnr NOT IN (SELECT DISTINCT C.artnr FROM tabelle_C C)


Ich weiß nicht, ob das der performanteste Weg ist, aber das sollte funktionieren.

Für den 2. Query sollte folgendes gehen (ungetestet): Ich gehe hier davon aus, dass in A, B, C unterschiedliche Artnr. liegen und es bereits ein "nicht gefunden" gibt, wenn in einer der Tabellen eine Artnr. nicht vorhanden ist.

Code:
(SELECT DISTINCT A.artnr 
FROM tabelle_A A
WHERE
A.artnr NOT IN (SELECT DISTINCT D.artnr FROM tabelle_D D))

UNION

(SELECT DISTINCT B.artnr 
FROM tabelle_B B
WHERE
B.artnr NOT IN (SELECT DISTINCT D.artnr FROM tabelle_D D))

UNION

(SELECT DISTINCT C.artnr 
FROM tabelle_C C
WHERE
C.artnr NOT IN (SELECT DISTINCT D.artnr FROM tabelle_D D))

Näheres übrigens hier: MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.8.3 Unterabfragen mit ANY, IN und SOME
 
So bekommst du ja nur die, die in den anderen Tabellen nicht drin sind, aber davon dann alle, oder garnichts.

Ich für meinen Teil würde das über mehrere SELECTS machen. Wobei ich sagen muss, dass ich da ned so der Crack mit SQL bin.

Die erste Abfrage würd ich so angehen:

Erst mal alle Daten aus Table_D auslesen:
Code:
$query = SELECT artnr FROM Table_D;
$rs = mysql_query($query, $sql)
while($row = mysql_fetch_array($rs, MYSQL_ASSOC)
{
Jetzt bekommt man ja alles in ein Array abgelegt, und kann Artnr für Artnr abfrage:
Code:
$query1 = "SELECT Table_A.artnr, Table_B.artnr, Table_C.arnt FROM Table_A, Table_B, Table_C WHERE Table_A.artnr = '$row[artnr]' && Table_B.artnr = $row[artnr] && Table_C.artnr = $row[artnr]"
$rs2 = mysql_query($query2, $sql)
Da würdest du dann nichts zurück bekommen, wenn in einer der Tabellen die artnr nicht vorhanden ist. Wenn sie in allen drei Tabellen vorhanden ist, bekommst du ein Resultat zurück. Das könnte man dann überprüfen, indem man sich die num_rows zurück bekommen lässt. Das löst zumindest mal dein erstes Problem.
 
Back
Top