Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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

Geschrieben

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]

Geschrieben

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]

Geschrieben

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 !! :)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...