Avatar billede Slettet bruger
22. juni 2006 - 12:28 Der er 11 kommentarer og
1 løsning

array og Where i mysql

Hvordan udtrækker jeg data fra en tabel hvis jeg kun wil have leveret de data hvor

WHERE id er i et array
Avatar billede fennec Nybegynder
22. juni 2006 - 12:32 #1
where ID in(1,3,6,7)
Avatar billede Slettet bruger
22. juni 2006 - 12:37 #2
kan man også
hvis
php
$arr=(2,5,4,6);

where ID in($arr)
Avatar billede fennec Nybegynder
22. juni 2006 - 13:09 #3
Det ved jeg faktist ikke, men det er jo bare at prøve det. Den skal nok komme med en fejl hvis det ikke virker :o)
Avatar billede arne_v Ekspert
22. juni 2006 - 13:20 #4
hvis du konstruerer SQL strengen i din PHP app så er MySQL ligeglad med om dele
af den kommer fra et PHP array eller ej

(mysqli og prepared statement vil give problemer)
Avatar billede Slettet bruger
22. juni 2006 - 13:31 #5
jeg skrev hvis forkert
sådan skulle det have været

php
$arr=array(2,5,4,6);
where ID in($arr)

Det jeg mener er om "where Id in" kan loope igennem et array eller man skal lave den om til en kommasepareret string først.
Avatar billede Slettet bruger
22. juni 2006 - 13:46 #6
jeg vil også gerne have så rækkefølgen af udtækket er det samme som den i arrayet

Er det muligt?
Avatar billede fennec Nybegynder
22. juni 2006 - 13:54 #7
Jeg har ikke selv prøvet den, men har set dette på dev.mysql.com:
SELECT * FROM countries ORDER by iso_code IN ('UK', 'US') desc

http://dev.mysql.com/doc/refman/5.0/en/select.html
find post "Posted by Imran Chaudhry on February 17 2005 5:13pm" et godt stykke nede i "User Comments"

Det må du også kunne udnytte.
Avatar billede Slettet bruger
23. juni 2006 - 17:09 #8
Den kunne jeg ikke få til at virke
SELECT * FROM countries ORDER by iso_code IN ('UK', 'US') desc

den sætter Uk og US øverst men ikke i den rækkefølge de står i parantesen.  Så det virker ikke rigtigt
Avatar billede fennec Nybegynder
26. juni 2006 - 08:29 #9
So er den eneste måde at sortere på ved at bruge union:

select 1 as sort, * from dinTabel where id=1
union select 2 as sort, * from dinTabel where id=3
union select 3 as sort, * from dinTabel where id=5
union select 4 as sort, * from dinTabel where id=7
order by sort

Som du kan se, bliver du så nød til at løbe dit array igennem, og dynamisk opbygge sql-strengen.
Avatar billede nielle Nybegynder
26. juni 2006 - 08:45 #10
22/06-2006 13:31:14>

Sådan:

$arr = array(2,5,4,6);
$sql = "... WHERE id IN (" . implode(",", $arr) . ")";
Avatar billede nielle Nybegynder
26. juni 2006 - 08:53 #11
23/06-2006 17:09:02>

Uhm, den SQL sætning vil ikke kunne køre uden en fejlmeddelelse:

SELECT * FROM countries WHERE iso_code IN ('UK', 'US') ORDER BY iso_code DESC

Hvis der kun er de to værdier, 'UK' og 'US', kan sorteringsrækkefølgen ordnes med at vælge ASC i stedet for DESC.

Der er ikke indbygget noget sortering i IN-kommandoen. For at klare situationen hvor der er mere end to værdier, er du nødt til at ty til en løsning á la det fennec foreslår i 26/06-2006 08:29:07.

BTW: ISO-landekoden plejer da normalt at være et tal og ikke 'UK' eller 'US'?
Avatar billede Slettet bruger
26. juni 2006 - 11:33 #12
Jeg tror det er nemmere at lade arrayet køre igennemt et loope og så lave en forespørgsel ved hver gennemløb. Jeg tænkte bare der måske var noget smart man kunne gøre med arrays og mysql query.

tak for hjælpen
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
Computerworld tilbyder specialiserede kurser i database-management

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