MySQL IF bedingung mit 2 werten

mogmog

Erfahrenes Mitglied
Hallo zusammen,

ich bin mit meinen Kenntnissen bezüglich des Query´s am ende:
Also Folgende Tabelle:
Code:
table
| id | menge | ...  |
---------------------
| 1  |     6     | .... |
| 2  |     8     | .... |
| 3  |    10    | .... |
| 4  |    16    | .... |

nun möchte ich folgendes abfrage:
Code:
"SELECT * FROM `table` WHERE `id`='1' LIMIT 1"

Allerdings ist da nun eine Bedingung dabei die "menge" muss größer sein als X
ist die so dann soll das Nächst größere als `menge X` ausgegeben werden.

Nun habe ich gelesen das es mit IF oder CASE gehen soll nur bei mir funktioniert das nicht.
 
Deine Frage widerspricht sich ein wenig :D

Mit der Abfrage fragst du nur den Wert mit der ID 1 ab und dann möchtest du weitere Daten abfragen.

Hier ein kleiner Ansatz (so wie ich es verstanden habe)

Die Abfrage sortiert die Ergebnisse nach der Menge (von klein nach groß) oder mit DESC nach menge wird dies umgekehrt.

SELECT * FROM tabelle ORDER BY menge
 
OK also ich habe jetzt folgendes soweit hin bekommen:

Code:
SELECT * ,
   CASE 
      WHEN `menge` >='7' && `id`='1' THEN '1' 
      WHEN `menge` >='7' THEN '2'
     ELSE '3'
   END AS 'SORT'
FROM `table`
WHERE `delete`!='1' 
ORDER BY `SORT` ASC,`menge` ASC
LIMTI 1

Der Query gibt mir schon mal soweit die richtigen Ausgabe es fehlt nun noch eine Kleinlichkeit wenn alle werte die 'SORT'='3' sind müssten bei der `menge` DESC sortiert werden wie kann ich da am ende noch eine (IF) Bedingung erstellen?

Mein Ansatz funktioniert hier leider nicht:
Code:
...
 // ORDER BY IF('Bedingung', 'dann', 'ansonnsten')
    ORDER BY IF('SORT'='3', 'menge' DESC, 'menge' ASC);

Es gibt auch noch mehr Informationen in der Tabelle an die ich ran kommen will daher das mit der "id" damit ich eine "auswahl" habe :D.
 
Haha habe es hinbekommen...

In dem ich noch einen Max Parameter hinzugefügt habe und siehe da es ging :p

Code:
...
      WHEN `menge` >='7' && `id`='1' THEN '1' 
      WHEN `menge` >='7' THEN '2'
      WHEN `max` ='1' THEN '2'
     ELSE '3'
...

und das hier:
Code:
...
 // ORDER BY IF('Bedingung', 'dann', 'ansonnsten')
    ORDER BY IF('SORT'='3', 'menge' DESC, 'menge' ASC);

das ist völliger misst das gehört wenn dann auch nach "SELECT"
 
Es ist mir leider anhand deiner Angaben nicht möglich den Fall nachzuvollziehen.
Du hat die Tabelle
Code:
table
| id | menge | ...  |
---------------------
| 1  |     6     | .... |
| 2  |     8     | .... |
| 3  |    10    | .... |
| 4  |    16    | .... |

Mach doch mal ein Beispiel wie das nachher aussehen soll.

Und was ist das für ein Feld 'max'?
 
Hi yaslaw,

ich habe meine Tabelle noch ein wenig erweitert.

Sie sieht jetzt wie Folg aus:
Code:
| id | menge | max | name | zusatz       |
|  1 |  6        |  0    |  test1 | mehr infos |
|  2 |  8        |  0    |  test2 | mehr infos |
|  3 | 10       |  0     |  test3 | mehr infos |
|  4 | 11       |  1     |  test4 | mehr infos |

Nun wollte ich einfach folgendes ausgeben lassen wenn der USER also sich für die `id` 1 entschieden hat aber die Anzahl aller teile mehr ist als '7' ist. Soll das System Automatisch nur noch alles das zur Auswahl anbieten was mehr als menge '6' ist.

D.h. der User hat die Auswahl für `id` 2,3,4 die ein soll dann also Ignoriert werden. Die abfage haute also nicht mehr hin wenn ich als 'max' hatte in diesem Fall also `id` 4 - (11).

Daraufhin habe ich die den Max noch mit hinzugefügt und schon ging es echt gut und das dann auch noch ohne Probleme...

Wenn es aber noch einfacher gehen sollte bin ich immer für Vorschläge offen. Das ein zigste Problem ist nur das ich das nur per SQL abfrage machen kann.


grüße mogmog
 
Wie wird 'Anzahl aller teile' berechnet?
Ist diese 7 eine fixe Zahl? Also immer 7, egal welche id der User gewählt hat.
 
Die anzahl ist wariabel.

diese Zahl '7' bekomme ich aber von meinem script. und die ist auch unabhänger von der ID die der User gewählt hat.

D.h. also ich bekomme von dem Script 2 Zahlen geliefer einmal die `id` und dei `menge` und mit den beiden wariablen zahen kann ich dann die Abfrage Manipulieren / steuern.
 
Sorry, dass ich nochmals nachhacken muss. Aber ich verstehs immer noch nicht ganz.

Du hast die 2 Parameter: id, mengeX
Du willst alle Datensätze bei denen die menge grösser als die mengeX ist
Die Datensätze dürfen aber nicht der selektionierten id entsprechen.
Du willst sie nach Menge sorteirt ausgeben.

können die Mengen in der Tabelle auch absteigend sein?
id(1) => menge(6)
id(2) => menge(12)
id(3) => menge(5)

Mach doch mal drei Beispiele, wass genau (in tabelarischer Form) ausgegebn werden soll bei verschiedenen Parametern id und mengeX
zB:
Code:
id = 1, mengeX=7
| id | menge
|  2 |  8        
|  3 | 10       
|  4 | 11

id=2, mengeX=5
| id | menge
|  1 | 6        
|  3 | 10       
|  4 | 11
 
im prinzit ist es das was du auch geschrieben hattest.

Fälle:
Code:
// Fall 1
// User auswahl id = 1, mengeX=3
// ergebnuss ist id=1
| id | menge
|  1 |  6 
|  2 |  8        
|  3 | 10       
|  4 | 11

// Fall 2 
//User auswahl id = 1, mengeX=7
// ergebniss ist id = 2
| id | menge
|  2 |  8        
|  3 | 10       
|  4 | 11

// Fall 3
//User auswahl id = 1, mengeX=22
// ergebniss muss id = 4
| id | menge
|  4 | 11
 

Neue Beiträge

Zurück