15. juli 2008 - 12:49Der er
26 kommentarer og 1 løsning
Forkorte mysql_query
Hej
Har en mysql_query hvor linjen bliver uhyggelig lang: mysql_query("SELECT * FROM sammenlign WHERE id='$id109' || id='$id110' || id='$111' || id='$112' || id='$113'");
- Fortsætter helt op til id150
Er der en måde jeg kan forkorte linjen på, så jeg ikke skal sidde og indtaste alle id-numre hele vejen op til nummer 150?
Jakobdo's løsning fungerer hvis du i virkeligheden mente selve tallene (eller de i øvrigt er direkte sekventielle). Hvis det er variable, og indholdet kan være mere eller mindre tilfældigt (dvs. ingen garanti for rækkefølge eller at de følger lige efter hinanden i tabellen), så skal du ud i en IN hvis det skal være kortere.
Nu mente jeg i forhold til det du sender med - hvis nu f.eks. $id109 kan være 52, $id110 er 51, og $id150 er 55, så vil $id110 ikke blive overvejet.
Igen, det forudsætter der er tale om *variable*, og ikke bare tal.
Hvad loopet angår: Nu vælger jeg lige at gå ud fra at der er tale om variable med det navn, og det af en eller anden grund ikke er muligt at smide det i et array.
(utestet, men princippet skulle være mere eller mindre til at gennemskue)
$start=109; $max=150; $sql='SELECT * FROM sammenlign WHERE id IN ('; for ($i=$start; $i<=$max; $i++) { if ($i != $start) $sql .= ','; $sql .="'" . ${'id'.$i} . "'"; //tager variablen "$id" efterfulgt af $i, eks. $id109, $id110, etc. } $sql.=')';
Det ville være lidt nemmere at arbejde med hvis det enten var et array, eller det er egentlige *tal* der menes (og ikke variable).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.