Hallo Gemeinde,
ich bin Neu hier und stehe vor einem (für mich) mittelschweren Problem. Und zwar möchte ich in einer Datenbank alle Tabellen nach zwei Kriterien durchsuchen lassen und bei positiver Übereinstimmung natürlich das Ergebnis ausgeben lassen. Die Basis ist, dass jedes der zwei Suchkriterien in einer Tabelle vorkommen muss, um berücksichtigt zu werden - Jedoch nur jeweils einmal. Bis jetzt hatte ich mir alles nötige Wissen (Codes, Abfragen usw) selbst "ergooglen" können, doch jetzt komm ich einfach nicht mehr weiter. Da ich scheinbar auch nicht weiß, wie ich mein Anliegen als eine knappe Suchabfrage formuliere.
Ich erkläre einmal kurz den Aufbau der Tabellen:
Jede Tabelle enthält die typische ID-Spalte und mehrere weitere Spalten. Eine von diesen wird nun nach zwei Werten durchsucht. In der Regel ist, wenn zutreffend, jeder gesuchte Wert nur einmal in der Tabelle vorhanden. Leider gibt es unabänderbare Ausnahmen, wo ein Wert mehr als einmal auftaucht - und genau dort beginnen die Probleme.
Der normale Aufbau; jeder "wert" ist nur einmal vorhanden:
Die Anomalie; "wert" ist doppelt (auch nur einmal, also mehrere Doppelte kommen nicht vor):
Für die Tabellen verwende ich folgende Abfrage (läuft in einer Schleife, daher alle Tabellen der DB):
Das klappt wunderbar, solange der Suchwert $suchewertb auch nur einmal in der Tabelle vorkommt. Das funktioniert natürlich auch bei doppeltem Wert, aber leider macht er nicht wie gewünscht weiter da HAVING COUNT(*) = 2 dann erfüllt ist.
Mein Wunsch dazu ist nun die Abfrage so zu modifizieren, dass weiter nach den beiden Suchwerten (es müssen beide einmal vorkommen) gesucht wird, aber bei doppelten nur der berücksichtigt wird mit der höchsten ID, also im Bsp. dann nur ID 4 (54) und ID 1 (54) soll ignoriert werden. Dazu ist noch als Konstante zu nennen, dass die doppelten Werte immer an erster und letzter Stelle der betreffenden Tabelle stehen. Der Hintergrund sind weitere MYSQL_QUERYs nach der Suche, die jedoch nur funktionieren, wenn $suchewerta eine kleinere ID ausgibt als $suchewertb.
Ich hoffe das einigermaßen verständlich rüber gebracht zu haben. Leider drehe ich mich diesbezüglich schon seit Tagen im Kreis. Immer wenn ich dachte einen Lösungsansatz gefunden zu haben, landete ich wieder beim Ausgangsproblem. Der mir erstmal am sinnig scheinendste Weg war eine verschachtelte MYSQL-Abfrage, jedoch scheitere ich an der Umsetzung selbiger.
Bin für jeden Lösungsansatz offen, und bedanke mich schonmal fürs Lesen.
lg
JMD
ich bin Neu hier und stehe vor einem (für mich) mittelschweren Problem. Und zwar möchte ich in einer Datenbank alle Tabellen nach zwei Kriterien durchsuchen lassen und bei positiver Übereinstimmung natürlich das Ergebnis ausgeben lassen. Die Basis ist, dass jedes der zwei Suchkriterien in einer Tabelle vorkommen muss, um berücksichtigt zu werden - Jedoch nur jeweils einmal. Bis jetzt hatte ich mir alles nötige Wissen (Codes, Abfragen usw) selbst "ergooglen" können, doch jetzt komm ich einfach nicht mehr weiter. Da ich scheinbar auch nicht weiß, wie ich mein Anliegen als eine knappe Suchabfrage formuliere.
Ich erkläre einmal kurz den Aufbau der Tabellen:
Jede Tabelle enthält die typische ID-Spalte und mehrere weitere Spalten. Eine von diesen wird nun nach zwei Werten durchsucht. In der Regel ist, wenn zutreffend, jeder gesuchte Wert nur einmal in der Tabelle vorhanden. Leider gibt es unabänderbare Ausnahmen, wo ein Wert mehr als einmal auftaucht - und genau dort beginnen die Probleme.
Der normale Aufbau; jeder "wert" ist nur einmal vorhanden:
Code:
+----+------+------+ | id | wert | iwas | +----+------+------+ | 1 | 54 | A | | 2 | 3 | B | | 3 | 87 | C | | 4 | 43 | D | +----+------+------+
Code:
+----+------+------+ | id | wert | iwas | +----+------+------+ | 1 | 54 | A | | 2 | 3 | B | | 3 | 87 | C | | 4 | 54 | D | +----+------+------+
PHP-Code:
$sql = MYSQL_QUERY("SELECT wert
FROM $tabelle
WHERE wert IN ('$suchewerta', '$suchewertb')
HAVING COUNT(*) = 2
") or die(mysql_error().' ?!');
Mein Wunsch dazu ist nun die Abfrage so zu modifizieren, dass weiter nach den beiden Suchwerten (es müssen beide einmal vorkommen) gesucht wird, aber bei doppelten nur der berücksichtigt wird mit der höchsten ID, also im Bsp. dann nur ID 4 (54) und ID 1 (54) soll ignoriert werden. Dazu ist noch als Konstante zu nennen, dass die doppelten Werte immer an erster und letzter Stelle der betreffenden Tabelle stehen. Der Hintergrund sind weitere MYSQL_QUERYs nach der Suche, die jedoch nur funktionieren, wenn $suchewerta eine kleinere ID ausgibt als $suchewertb.
Ich hoffe das einigermaßen verständlich rüber gebracht zu haben. Leider drehe ich mich diesbezüglich schon seit Tagen im Kreis. Immer wenn ich dachte einen Lösungsansatz gefunden zu haben, landete ich wieder beim Ausgangsproblem. Der mir erstmal am sinnig scheinendste Weg war eine verschachtelte MYSQL-Abfrage, jedoch scheitere ich an der Umsetzung selbiger.
Bin für jeden Lösungsansatz offen, und bedanke mich schonmal fürs Lesen.
lg
JMD
Kommentar