King Phoenix Geschrieben 30. Dezember 2009 Teilen Geschrieben 30. Dezember 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 30. Dezember 2009 Teilen Geschrieben 30. Dezember 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 30. Dezember 2009 Teilen Geschrieben 30. Dezember 2009 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
diemah Geschrieben 30. Dezember 2009 Teilen Geschrieben 30. Dezember 2009 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
King Phoenix Geschrieben 31. Dezember 2009 Autor Teilen Geschrieben 31. Dezember 2009 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 !! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.