Avatar billede sansalvador Nybegynder
04. januar 2004 - 21:19 Der er 8 kommentarer og
1 løsning

SQL: Where=Array ?

Jeg har en tabel med data der skal vises efter refid.

Dvs tabellen ser sådan her ud:
Navn: testtable
-id
-titel
-refid (array, indeholder fx "3,4,7,9")

Arrayet i refid, skal være de "kategorier/IDs" denne titel skal vises under. Dvs den skal vises under katid 3, 4, 7 og 9.

Dvs hvis der står side.php?id=4, skal den vise den(de) række(r) i testtable, hvor arrayet indeholder 4.

Hvordan gør man det?

Fedt hvis der var noget i mysql, der kunne gøre følgende.

SELECT * FROM testtable WHERE refid=inarray(4)

Er der nok ikke, men ku være fedt :) Ellers nogle løsninger?
Avatar billede erikjacobsen Ekspert
04. januar 2004 - 21:25 #1
SELECT * FROM testtable WHERE find_in_set(4,refid)>0
Avatar billede odni Nybegynder
04. januar 2004 - 21:25 #2
(Et lille forslag måske):

MÅSKE kunne man bruge LIKE, dvs:

SELECT * FROM testtable WHERE refid LIKE %4%;
Avatar billede sansalvador Nybegynder
04. januar 2004 - 21:26 #3
Prøver lige erikj.

odni, hvad så hvis der står 14 og 4 i arrayet??
Avatar billede Slettet bruger
04. januar 2004 - 21:29 #4
MySQL er (som bekendt) en relationel database. Når du indsætter en komma sepereret streng af værdier i et felt, ryger fidusen ved systemet og funktionerne.

I stedet for at refid er et "array", bør du oprette en (eller flere nye tabeller). Her et eksempel (med bøger), det nok tilsvarer dit scenarie:

Tabel 'bog': (tilsvarer din nuværende tabel - men uden refid)

bog_id
bog_titel

Tabel 'kategori': (liste over bog kategorier 'science fiction' osv.)

kategori_id
kategori_navn

Tabel 'bog_kategorier': (en bog kan være tilknyttet flere kategorier)

bog_id
kategori_id

Relationen (tabellen) bog_kategorier er den centrale. Denne tilsvarer, hvad du har i dit refid nu. En bog kan være tilknyttet flere kategorier. Er en bog med id 2 tilknyttet kategorierne 4 og 10, vil bog_kategorier tabellen have 2 rækker, nemlig:

2, 4
2, 10

Du bør lave dit tabeldesign tilsvarende dette lille eksempel. Når du så skal hente alle bøger, der er i kategori 4, kan du gøre som:

SELECT * FROM bog, bog_kategorier WHERE bog.bog_id = bog_kategorier.bog_id AND kategori_id = 4;
Avatar billede odni Nybegynder
04. januar 2004 - 21:29 #5
Så kan man vel benytte sig af AND og OR, hvis jeg forstår dit spørgsmål rigtigt - spekulér ikke så meget over det - brug erikj's svar
Avatar billede erikjacobsen Ekspert
04. januar 2004 - 21:31 #6
Yeps, field_in_set er ikke synderligt effektivt og overtræder første normalform i databasedesign.
Men den er der, og er det ikke ret mange rækker kan det nok komme ud på et.
Er der mange rækker, så beder man om problemer.
Avatar billede sansalvador Nybegynder
04. januar 2004 - 21:52 #7
Okay ... Erikj, er den tilstrækkelig hvis der kun er cirka 40 kategorier mens der kan være ubegrænset titler ...

Eller er det skidt?

Hvis skidt, vil jeg nok benytte mig af mercurs :)
Avatar billede erikjacobsen Ekspert
04. januar 2004 - 21:54 #8
Så er den dårlig - du kan jo ligesågodt øve dig på at gøre det "rigtigt"
Avatar billede sansalvador Nybegynder
04. januar 2004 - 22:15 #9
Okay .. Takker alle :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester