Zum Inhalt springen

Dynamische MySQL Abfrage über PHP


Empfohlene Beiträge

Folgendes Problem:

Habe mehrere DD Menüs die Werte aus einer MYSQL Tabelle übernehmen, gebe diese mit POST weiter als Assoziatives Array.

Nach dem klick auf Submit habe ich dann folgendes POST Array:


Array
(
[X] => bla
[Y] => blubb
[TID] => 1
[FID] => 1
[LID] => 1
[L] => 100
[P] => -250
[S] => -250
[T2] => 1
[F2] => 2
[L2] => 1
[L2] => 100
[P2] => -250
[S2] => -250
[T3] => 1
[F3] => 3
[L3] => 1
[L3] => 100
[P3] => -250
[S3] => -250
)
[/PHP]

Die SQL Abfrage dazu:

[PHP]
$testabfrage = "SELECT 'blubb'
FROM syst
WHERE (S= '$_POST[S]')
AND (T = '$_POST[T]')
AND (F = '$_POST[F]')
AND (L = '$_POST[L]')
AND (P = '$_POST[P]')
GROUP by '$_POST[bla]'";
$testresult = mysql_query($testbfrage) or die("Anfrage fehlgeschlagen: " . mysql_error());

diese Abfrage habe ich 3 mal wobei bla und blubb immer gleich sind aber der Rest unterschiedlich wie ihr seht.

Mein eigentliches Problem ist aber das man im vorigen Fenster auswählen kann, welches der Werte an der Stelle bla steht. ich hätte z.B. anstatt X einfach P z.B. nehmen können. dann würde die Abfrage so aussehen müssen:


$testabfrage = "SELECT 'blubb'
FROM syst
WHERE (S= '$_POST[S]')
AND (T = '$_POST[T]')
AND (F = '$_POST[F]')
AND (L = '$_POST[L]')
AND (X = '$_POST[X]')
GROUP by '$_POST[bla]'";
$testresult = mysql_query($testbfrage) or die("Anfrage fehlgeschlagen: " . mysql_error());

[/PHP]

und im Array wäre natürlich nicht [X] => bla sondern [P] => bla.

Also wie mache ich eine dynamische Abfrage ?

Mir würde auch schon ein wenig weiterhelfen wie ich das hier gebacken kriege:

[PHP]
$testabfrage = "SELECT 'blubb'
FROM syst
WHERE (Arrayschlüssel2 = 'Arraywert2')
AND (Arrayschlüssel3 = 'Arraywert3')
AND (Arrayschlüssel4 = 'Arraywert4')
AND (Arrayschlüssel5 = 'Arraywert5')
AND (Arrayschlüssel6 = 'Arraywert6')
GROUP by '$_POST[bla]'";
$testresult = mysql_query($testbfrage) or die("Anfrage fehlgeschlagen: " . mysql_error());

Hoffe das ist verständlich und mir kann jemand helfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich sehe jetzt nur die Möglichkeit das Statement schrittweise durch Konkatination und entsprechende if Selektionen zusammenzusetzen.

Du könntest auch mit einer foreach Schleife durch das Array laufen und dir die Werte speichern und später die gespeicherten Werte in das Statement einsetzen.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

also wenn POST['X'] => bla wird nach X gruppiert?

ich würd als erstes mal ein element 'bla' in POST ablegen das angibt wonach gruppiert wird

POST['bla'] => 'X'

das einfachste wäre wohl alle beötigten elemente aus POST in bedingungen umzuschreiben und in ein weiteres array zu packen. das ganze dann einmal mit implode behandeln.

etwa so:


$aWhere = array();
// erstmal alle werte die in allen querys auf tauchen müssen
$aWhere[] = '\'T\' = \''.$_POST['T'].'\'';
[..]
// dann der dynamische teil
switch ($_POST['bla']) {
case 'X':
$aWhere[] = '\'P\' = \''.$_POST['P'].'\'';
break;
case 'P':
$aWhere[] = '\'X\' = \''.$_POST['X'].'\'';
break;
[..]
}
$sQuery = 'SELECT blubb FROM syst ';
$sQuery .= implode(' AND ', $aWhere);
$sQuery .= ' GROUP BY '.$_POST['bla'];
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich hoffe dir hilft das hier (ist ungetestet, aber der Prinzip sollte verständlich sein):


$testabfrage = "SELECT 'blubb'
FROM syst
WHERE ";
$keys = array_keys($_POST);
for ($i=0; $i<count($keys); $i++) {
if ($i>0) {
$testabfrage .= " AND ";
}
$testabfrage .= " (".$keys[$i]."='".$_POST[$keys[$i]]."') ";

}
$testabfrage .= " GROUP by '$_POST[bla]'"
$testresult = mysql_query($testbfrage) or die("Anfrage fehlgeschlagen: " . mysql_error());
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

krass, das ging ja schnell ! :eek

Danke !!

Mit dem Code von Diemah geht es jetzt am schnellsten !

Habe aus $i =0 nur $i=2 machen müssen (damit er nach blubb beginnt in die Abfrage zu schreiben).

Das Problem dabei ist jetzt, das er die ganzen Sachen mit den 2en und 3en dahinter auch in die erste Abfrage packt dabei sind das die Werte für die nächsten beiden Abfragen die genauso aussehen wie die erste aber anstatt den Werten ohne Zahl dahinter die Werte mit Zahl dahinter haben (also eine Abfrage für Werte ohne Zahl, eine für Werete mit 2 dahinter und eine für Werte mit 3 dahinter.

Werde mich jetzt da dran setzen und hoffe ich krieg's gebacken.

Nochmal vielen Dank und ich wünsche euch allen einen guten Rutsch !! :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...