SQL select .. where id=1 or id=5 or id=19

Senator42

Well-known member
Beiträge
886
Punkte Reaktionen
80
Zuviel Werbung?
->Hier kostenlos registrieren
hallo Datenbänker,

gibt es eine bessere variante für MySQL wenn ich nach mehreren suche statt:

select name from tbl where id=1 or id=5 or id=19 id=21 or id=22 or id=42;

?
(das where bleibt nicht konstannt! die zahlen hab ich in einem PHP array und sind verschieden in der anzahl)
 
Zuletzt bearbeitet:

Blockmove

Supermoderator und User des Jahres 2019
Teammitglied
Beiträge
9.228
Punkte Reaktionen
2.432
Du könntest deine Vergleichswerte für id in eine weitere Tabelle schreiben.
Dann läßt sich bestimmt was mit joins machen ... Bin aber auch kein DB-Experte.

Gruß und guten Rutsch
Dieter
 
OP
Senator42

Senator42

Well-known member
Beiträge
886
Punkte Reaktionen
80
Unterstützt MySQL where id in (1,5,19, ...)?
Ja, das geht,
ABER

das geht ( mit count(*) und GROUP BY Id )
SELECT Id, count(*) FROM tbl WHERE Id IN(17,1) GROUP BY Id ;

das geht NICHT ( mit count(*) und ORDER BY FIELD(Id,17,1) und GROUP BY Id )
SELECT Id, count(*) FROM tbl WHERE Id IN(17,1) ORDER BY FIELD(Id,17,1) GROUP BY Id ;

das geht ( mit count(*) und ORDER BY FIELD(Id,17,1) -- )
SELECT Id, count(*) FROM tbl WHERE Id IN(17,1) ORDER BY FIELD(Id,17,1) ;
[ definierte sortierung: ORDER BY FIELD(Id,17,1) ]
[ bzw. sortierung genau in dieser Folge: ORDER BY FIELD(Id,17,16,1,7,4,3,5,6) ]

ALSO
ORDER BY FIELD(Id,17,1) __ und __ GROUP BY Id __ gleichzeitig geht nicht !
 

MRose

Well-known member
Beiträge
120
Punkte Reaktionen
19
Hallo,

probiers mal mit einer Unterabfrage:

Code:
SELECT 
  Id, Menge
FROM 
  (
  SELECT 
    Id, count(*) AS Menge
  FROM 
    tbl 
  WHERE 
    Id IN(17,1) 
  GROUP BY 
    Id
  )
ORDER BY 
  FIELD(Id,17,1)
 
Oben