[PHP] Ausblenden bestimmter SQL-Einträge

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

ich habe folgendes Problem:

Tabelle A:
ID - Host - Message
0 - 39 - Test 1
1 - 39 - Test 1
2 - 49 - Test 1
3 - 39 - Test 2
4 - 49 - Test 2
5 - 49 - Test 2

Tabelle B:
ID - Host - Message - Global
0 - 39 - Test 1 - 0
0 - 49 - Test 2 - 1


Erklärung der Tabelle B:
Global kann nur zwei unterschiedliche Werte enthalten: 0 oder 1.
Ist diese auf 0 gesetzt, so sollen Einträge aus Tabelle A die den gleichen Host und die gleiche Message wie der entsprechende Eintrag in Tabelle B nicht angezeigt werden.

Ist Global in Tabelle B aber auf 1 so sollen Alle Einträge aus Tabelle A ausgeblendet werden die die gleiche Nachricht wie der entsprechende Eintrag in Tabelle B bestitzt.

Da ich mir beide Tabellen mit einem vollen Select hole könnte man einfach eine If-Abfrage machen, aber wie muss diese aussehen? bisher habe ich folgendes probiert:
PHP:
	foreach($erg_sql_black as $black_logs){
		foreach($erg_sql_logs as $white_logs){
			if($black_logs[3]==1 && $black_logs[1] == $white_logs[7]){
				$i++;
				continue;
			} elseif ($black_logs[3]==0 && $black_logs[1] == $white_logs[7] && $black_logs[2] == $white_logs[1]){
				$i++;
				continue;
			} else {
				if($white_logs[8]=="1"){
					$table[] = array("<strike>".$white_logs[5]."</strike>",
					"<strike><a href='?filter=$filter&seite=$seite&register=1&searchtable=$searchtable&searchtext=$searchtext&host=$white_logs[1]&entriespersite=$anzahl_pro_seite'>".$white_logs[1]."</a></strike>",
					"<strike>".$white_logs[2]."<BR>".$white_logs[3]."</strike>",
			 		"<strike>".$white_logs[6]."</strike>",
			 		"<strike>".$white_logs[7]."</strike>",
			 		"<input type='checkbox' name='checkbox[]' value='".$erg_sql_logs[$i][0]."' $checked_box><a href='?filter=$filter&register=$register&searchtable=$searchtable&searchtext=$searchtext&host=$host&seite=$seite&aktion=accept&id=".$erg_sql_logs[$i][0]."'><img src='images/accept.png' border='0'></a><a href='?filter=$filter&register=$register&searchtable=$searchtable&searchtext=$searchtext&host=$host&seite=$seite&aktion=delete&id=".$erg_sql_logs[$i][0]."'><img src='".$gui->designpath."/images/16_delete.png' border='0'></a>",
			 		"<a href='?seite=$seite&aktion=blacklist&message=".$white_logs[7]."'><img src='images/16_delete_black.png' border='0'></a>");
				} else	{
					$table[] = array($white_logs[5],
			 		"<a href='?filter=$filter&seite=$seite&register=0&searchtable=$searchtable&searchtext=$searchtext&host=$white_logs[1]&entriespersite=$anzahl_pro_seite'>".$white_logs[1]."</a>",
			 		$white_logs[2]."<BR>".$white_logs[3],
			 		$white_logs[6],
			 		$white_logs[7],
			 		"<input type='checkbox' name='checkbox[]' value='".$erg_sql_logs[$i][0]."' $checked_box><a href='?filter=$filter&register=$register&searchtable=$searchtable&searchtext=$searchtext&host=$host&seite=$seite&aktion=accept&id=".$erg_sql_logs[$i][0]."'><img src='images/accept.png' border='0'></a><a href='?filter=$filter&register=$register&searchtable=$searchtable&searchtext=$searchtext&host=$host&seite=$seite&aktion=delete&id=".$erg_sql_logs[$i][0]."'><img src='".$gui->designpath."/images/16_delete.png' border='0'></a>",
			 		"<a href='?seite=$seite&aktion=blacklist&message=".urlencode(addslashes($white_logs[7]))."&hostadress=".$white_logs[1]."&global_read=1&seite=$seite'><img src='images/16_delete_black.png' border='0'></a>");
				}
				$SVColors[] = $rowColors[$white_logs[3]];
				$i++;
			}
		}
	}

Ergebnis ist, dass keine Einträge ausgegeben werden. Eigentlich sollte er dann den Eintrag mit der ID 2 ausgeben.
Wer kann mir auf die schnelle eine solche Abffrage proggen?


MFG
Papenburger
 
Ich habe in meiner Ausbildung gelernt, dass man alles, was ein DB-System kann, auch dem DB-System überlassen soll.
Ich würde also die Problemstellung mit einem einzgen SQL-Statement lösen:

SELECT spalten
FROM tabelleA A
WHERE NOT EXISTS
( SELECT *
FROM tabelleB B
WHERE A.MESSAGE = B.MESSAGE
AND B.GLOBAL = 1 )
AND NOT EXISTS
( SELECT *
FROM tabelleB B
WHERE A.MESSAGE = B.MESSAGE
AND A.HOST = B.HOST
AND B.GLOBAL = 0 ) ;