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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.