/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Må ku' gøres simplere...
Fra : Steen Broelling


Dato : 26-03-02 14:41

Hej

Jeg ska' hente data fra en tabel, hvor værdien kan være mange
forskellige slags (ca. 25). Fra en mySQL.

Jeg forsøger at gøre nedenstående via PHP, men serveren kører helt i
sænk og går i stå - den kommer ikke med fejlmeddelelser.

"SELECT obsid FROM FUGLEDATA a, TURDATA b, ADF c WHERE a.turid =
b.turid AND a.adf = c.adfid AND a.adf = '2' OR a.adf = '3' OR a.adf =
'5' OR a.adf = '6' OR a.adf = '18' OR a.adf = '32' OR a.adf = '55'
OR... og så videre";

Kan det gøres smartere (det kan det sikkert), men hvodden'!??

MVH Steen Brølling

 
 
Jonas Koch Bentzen (26-03-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 26-03-02 15:05

Steen Broelling skrev:
>
> "SELECT obsid FROM FUGLEDATA a, TURDATA b, ADF c WHERE a.turid =
> b.turid AND a.adf = c.adfid AND a.adf = '2' OR a.adf = '3' OR a.adf =
> '5' OR a.adf = '6' OR a.adf = '18' OR a.adf = '32' OR a.adf = '55'
> OR... og så videre";

Først og fremmest skal du sørge for at lave nogle parenteser rundt om de
forskellige ting:

WHERE (a = 1 AND b = 2) OR (x = 3 AND z = 5)

--
Jonas Koch Bentzen

http://understroem.dk/

Jens Gyldenkærne Cla~ (26-03-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 26-03-02 15:07

Steen Broelling <strix@mail.dk> skrev:

> "SELECT obsid FROM FUGLEDATA a, TURDATA b, ADF c WHERE a.turid
> = b.turid AND a.adf = c.adfid AND a.adf = '2' OR a.adf = '3'
> OR a.adf = '5' OR a.adf = '6' OR a.adf = '18' OR a.adf = '32'
> OR a.adf = '55' OR... og så videre";
>
> Kan det gøres smartere (det kan det sikkert), men hvodden'!??

[Med forbehold - jeg kender ikke til mySQL]
Prøv at bruge standard joinsyntaks:

SELECT obsid FROM FUGLEDATA a
INNER JOIN TURDATA b ON a.turid = b.turid
INNER JOIN ADF c ON a.adf = c.adfid
WHERE a.adf IN ('2','3','5',....)

[understøtter mySQL IN-syntaksen?]

Indholdet i a.adf ser ud til kun at være heltal - hvis det er sådan
bør du også gemme dem i et taltypefelt.

Meget afgørende for hastigheden - specielt når du bruger så mange
OR-betingelser - er dine indeks. Er der indeks på a.adf?

--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)

Mads Lie Jensen (26-03-2002)
Kommentar
Fra : Mads Lie Jensen


Dato : 26-03-02 19:10

On Tue, 26 Mar 2002 14:07:17 +0000 (UTC), "Jens Gyldenkærne Clausen"
<jc@dmf.dk> wrote:

>[understøtter mySQL IN-syntaksen?]

Ja.

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk

Directory Opus - nu også til windows - http://www.gpsoft.com.au

Martin Christensen (26-03-2002)
Kommentar
Fra : Martin Christensen


Dato : 26-03-02 16:53

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

>>>>> "Steen" == Steen Broelling <strix@mail.dk> writes:
Steen> Kan det gøres smartere (det kan det sikkert), men hvodden'!??

For at supplere de andre kloge hoveder vil jeg lige nævne, at du
sikkert kan fjerne alle de ORs (hvis parentesen ellers skal sættes
uden om dem):

SELECT [...] WHERE [...] AND foo IN (bar, baz, quux, ...)

Hvis så 'foo' er at finde i mængden i den efterfølgende parentes
evalueres underudtrykket til sandt.

Dette er i SQL92, men jeg ved ikke om MySQL understøtter det. Det er
da værd at prøve.

Martin

- --
Homepage: http://www.cs.auc.dk/~factotum/
GPG public key: http://www.cs.auc.dk/~factotum/gpgkey.txt
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Using Mailcrypt+GnuPG <http://www.gnupg.org>

iEYEARECAAYFAjygmXMACgkQYu1fMmOQldUIHQCfTQbKOTAKpnIyTJ3p8GbMNmuM
s1kAn0pgOFfYASTbRDlfpIN56aXUFhyE
=f0AJ
-----END PGP SIGNATURE-----

Steen Broelling (26-03-2002)
Kommentar
Fra : Steen Broelling


Dato : 26-03-02 19:20

Hej

Tak for svarene. Nogen af dem virker i hvert fald, men jeg forsøger
mig lidt frem.
Ka' godt li' dender IN ting :)

MVH Steen

Jens Gyldenkærne Cla~ (26-03-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 26-03-02 21:35

Steen Broelling <strix@mail.dk> skrev:

> Ka' godt li' dender IN ting :)

Den er også praktisk. Men du skal ikke regne med at den forbedrer
performance - fra en diskussion i Accessgruppen husker jeg at i
hvert fald Access fortolker x IN (a, b, c) som x = a OR x = b OR x
= c.

Men det er en hel del nemmere at læse og skrive syntaksen med IN.

--
Jens Gyldenkærne Clausen
MF (Medlem af Fiduso - www.fiduso.dk)

Peter Brodersen (27-03-2002)
Kommentar
Fra : Peter Brodersen


Dato : 27-03-02 02:17

On Tue, 26 Mar 2002 20:34:53 +0000 (UTC), "Jens Gyldenkærne Clausen"
<gyros@email.dk> wrote:

>Men du skal ikke regne med at den forbedrer
>performance - fra en diskussion i Accessgruppen husker jeg at i
>hvert fald Access fortolker x IN (a, b, c) som x = a OR x = b OR x
>= c.

Det er blot en anden notation, ja. Dette ses fx vha. en explain på sin
MySQL-query.

Til gengæld er den, som folk nævner, meget rar og gør tingene mere
overskuelig, når man allerede har bare mere end én yderligere
condition i sin where-clause.

--
- Peter Brodersen

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste