24. oktober 2005 - 18:56
Der er
58 kommentarer og 2 løsninger
Select med IN.
Hej allesammen.. Bruger denne kode: $id_er = "233,2051,973,384"; $res2 = mysql_query("SELECT * FROM cpg133_pictures WHERE PID IN ($id_er)") or die(mysql_error()); Men problemet er at den hente sådan her: 233,384,973,2051 (altså en anden rækkefølge).. Men den skal tage efter denne : $id_er = "233,2051,973,384"; Ved i hvad man kan gøre ved deT? På forhånd tak.
Annonceindlæg fra Barco
24. oktober 2005 - 19:01
#1
Er det ikke "bare" er spørgsmål om at ordre output korrekt?
24. oktober 2005 - 19:02
#2
Nej ikke helt.. Det skal gøres der.
24. oktober 2005 - 19:02
#3
Databasen forsøger at optimer hastigheden ved at hente posterne på den mest økonomiske måde. Denne har - som du har erfaret - ikke noget at gøre med rækkefølgen i din IN. Hvis du skal have posterne ud i den givne rækkefølge, så er der vist ikke andet for end at dele den op i 4 separate SQL-sætninger - en hvor hvert pid.
24. oktober 2005 - 19:03
#4
Så kommer der godt nok mange sql-sætninger så.. Har nemlig mange flere ider en det der...
24. oktober 2005 - 19:04
#5
Du har en anden mulighend - nemlig at hente posterne i den rækkefølge databasen fortrækker, placere dem i et array undervejs, og så tilsidst at sortere dette array efter dine pid'er.
24. oktober 2005 - 19:04
#6
Den henter i den rækkefølge fordi det er den rækkefølge de ligger i. Det kan du ikke umiddelbart gøre noget ved, med mindre du kan opnå samme rækkefølge ved at sortere på et andet felt. Ellers skal du ud i at sammensætte en masse queries med UNION, hvor hver del kun returnerer en enkelt række - ikke nogen sjov løsning hvis der kan være et varierende antal elementer. Du kan selvfølgelig også sortere uden om MySQL ved at hive alle rækker ud i et array, og skrive en funktion til at sortere - læs op på funktionen usort, den viser dig hvor meget der i så fald skulle laves.
24. oktober 2005 - 19:06
#7
Dette har imidlertid den ulempe at det kræver mere RAM og og flere CPU-resourcer. Specielt hvis vi snakker om mange pid'er.
24. oktober 2005 - 19:06
#8
Hmm okay.. Har i et lille ekspempel med sortering.. Er nemlig ikke helt med hvad i mener :S
24. oktober 2005 - 19:16
#9
Jeg ville nu ikke bruge usort, men snare noget i denne stil: $id_er = "233,2051,973,384"; $query = mysql_query("SELECT pid, a, b, c FROM cpg133_pictures WHERE PID IN (" . $id_er . ")") or die(mysql_error()); $values = array(); while ($row = myssql_fetch_assoc($query) { $values[row["pid"]] = $row["a"] . ", " . $row["b"] . ", " . $row["c"]; } $id_er_arr = explode(",", $id_er); foreach ($id_er_arr as $id) { if (array_key_exists($id, $values)) { echo $id . " = " . $values[$id] . "<br>"; } }
24. oktober 2005 - 19:37
#10
Den ikke få den til at virke.. Min hotel viser desværre ikke fejl koder :@ ... Mangler der noget i den..
24. oktober 2005 - 19:40
#11
Du skal selvfølgelig rette a, b og c til de feltnavne der gælder i dit tilfælde. Udover det, så kan jeg ikke lige identifisere nogen fejlkilder. :^|
24. oktober 2005 - 19:42
#12
<? @mysql_connect("localhost","AAAAAAAAAA","AAAAAA") or die( mysql_error() ); mysql_select_db("electro_hide_dk"); $id_er = "233,2051,973,384"; $query = mysql_query("SELECT pid, filename FROM cpg133_pictures WHERE PID IN (" . $id_er . ")") or die(mysql_error()); $values = array(); while ($row = myssql_fetch_assoc($query) { $values[row["pid"]] = $row["pid"] . ", " . $row["filename"]; } $id_er_arr = explode(",", $id_er); foreach ($id_er_arr as $id) { if (array_key_exists($id, $values)) { echo $id . " = " . $values[$id] . "<br>"; } } echo mysql_error(); ?> er det helt ved siden af :S
24. oktober 2005 - 19:44
#13
Næ, det ser sån' set ok ud :^)
24. oktober 2005 - 19:46
#14
hmm nederen..
24. oktober 2005 - 20:18
#16
$id_er = "233,2051,973,384"; $query = mysql_query("SELECT * FROM cpg133_pictures WHERE PID IN ($id_er)") or die(mysql_error()); $id_er = explode(",", $id_er); $values = array(); while ($row = myssql_fetch_assoc($query)) { $values[array_search($row["pid"],$id_er)] = $row; } og så er det bare at skrive dem ud eller hvad du nu har lyst til
25. oktober 2005 - 17:52
#17
Jeg kan virkelig få det til at virker :S ... Men har fundet en anden ide. Håber i kan hjælpe med den. $id_er = "233,2051,973,384"; $navn = "madsen,thomas,patrick,stanek"; (madsen er id 233, thomas er 2051 osv..) Så køre loppet så $billede[madsen] = $row['data'] $billede[thomas] = $row['data'] Kan vi deT? På forhånd tak-
25. oktober 2005 - 18:01
#18
Har du prøvet med 24/10-2005 19:49:07 endnu? Uden fejlmeddelelser er det ofte temmeligt svært at lave noget fornuftig debugging.
25. oktober 2005 - 18:02
#19
Ja har prøvet det... Ved ikke hvad der sker for lorte hotel :@ .. Den viser ikke fejl.
25. oktober 2005 - 18:03
#20
Prøv at vise os din kode.
25. oktober 2005 - 18:04
#21
Problemet lader til at være at det kode der er blevet postet her har en stavefejl - myssql_fetch_array i stedet for mysql_fetch_array.
25. oktober 2005 - 18:06
#22
<? @mysql_connect("localhost","AAAAAAAAAA","AAAAAA") or die( mysql_error() ); mysql_select_db("electro_hide_dk"); $id_er = "233,2051,973,384"; $query = mysql_query("SELECT pid, filename FROM cpg133_pictures WHERE PID IN (" . $id_er . ")") or die(mysql_error()); $values = array(); while ($row = myssql_fetch_assoc($query) { $values[row["pid"]] = $row["pid"] . ", " . $row["filename"]; } $id_er_arr = explode(",", $id_er); foreach ($id_er_arr as $id) { if (array_key_exists($id, $values)) { echo $id . " = " . $values[$id] . "<br>"; } } echo mysql_error(); ?> Det faktisk nøjagtigt denne kode jeg prøver at kører.
25. oktober 2005 - 18:10
#23
pidgeot> Godt spottet :^) rasmus-madsen> I den kode prøver du jo ikke at sætte fejludskrivning til vai error_reporting()?
25. oktober 2005 - 18:11
#24
Okay, så stod der myssql_fetch_assoc, ikke myssql_fetch_array - men begge ting er under alle omstændigheder forkerte, der er et s for meget i myssql-delen - der skal i stedet stå mysql.
25. oktober 2005 - 18:14
#25
pageheader($lang_search_php[0]); $id_er = "233,2051,973,384"; $query = mysql_query("SELECT pid, filename FROM cpg133_pictures WHERE PID IN (" . $id_er . ")") or die(mysql_error()); $values = array(); while ($row = mysql_fetch_assoc($query) { $values[row["pid"]] = $row["pid"] . ", " . $row["filename"]; } $id_er_arr = explode(",", $id_er); foreach ($id_er_arr as $id) { if (array_key_exists($id, $values)) { echo $id . " = " . $values[$id] . "<br>"; } } echo mysql_error(); echo error_reporting(); Stadig intet.. Måske skulle jeg prøve på et andet hotel.. Men skal lige hjem først så.
25. oktober 2005 - 18:17
#26
Du bruger error_reporting() forkert. Den skal op i starten af din kode og så skal den have et argument som angiver hvor meget der skal skrives ud.
25. oktober 2005 - 18:17
#27
F.eks.: error_reporting(E_ALL);
25. oktober 2005 - 18:57
#28
Fejlen er i denne linje : $values[row["pid"]] = $row["pid"] . ", " . $row["filename"]; Med denne fejl: Parse error: parse error, unexpected '[', expecting ']' in /home/www/web82/html/test/hvem3.php on line 33
25. oktober 2005 - 19:01
#29
Peøv ar retet til: $values[$row["pid"]]
25. oktober 2005 - 19:04
#30
Det er gjordt nu.. Men stadig noget som er galt.. Er lige ved at kigge.. Skriver hvis jeg ikke lig finder den :D
25. oktober 2005 - 19:06
#31
Så... Nu udskriver den: 233 = 233, IMG_1506.JPG 2051 = 2051, p 140.jpg 973 = 973, IMG_2320.JPG 384 = 384, IMG_2093.JPG 2039
25. oktober 2005 - 19:10
#32
Uheldigt filnavn du har der: "p 140.jpg".
25. oktober 2005 - 19:13
#33
Ja den er lidt.. Men det går.. Men har et andet problem. Hvis du vil hjælpe mig ?
25. oktober 2005 - 19:26
#34
Sig frem?
25. oktober 2005 - 19:29
#35
HAr denne kode: $i=1; $i2=1; $values = array(); while ($row = mysql_fetch_assoc($query)) { $Billedes[$i2] = "albums/" .$row['filepath'] ."thumb_" .$row['filename']; $Album[$i2] = $row['aid']; $Pid[$i2] = $row['pid']; $pw[$i2] = $row['pwidth']; $ph[$i2] = $row['pheight']; $i2++; } $id_er_arr = explode(",", $id_er); foreach ($id_er_arr as $id) { if (array_key_exists($id, $values)) { echo $Billedes[$i]; //der kommer mere her der skal bruge de andre variabler... $i++; } Kører denne kode her. Den skulle egentlig udskrive 4 stier men det gør den ikke :@.. Ingen fejl.. Loader bare siden.
25. oktober 2005 - 19:35
#36
Da du lægger stierne i $Billedes[$i2] med indeksene 1, 2, 3 og 4 så nytter det ukke noget at du forsøger at hente dem ud igen med dine pid'er. Så skal de jo hentes ud igen med 1, 2, 3 og 4.
25. oktober 2005 - 19:40
#37
Så du mener det skal være noget lignede: $values = array(); while ($row = mysql_fetch_assoc($query)) { $Billedes = "albums/" .$row['filepath'] ."thumb_" .$row['filename'] .","; $Album .= $row['aid'] .","; $Pid .= $row['pid'] .","; $pw .= $row['pwidth'] .","; $ph .=$row['pheight'] .","; } $id_er_arr = explode(",", $id_er); $$Billedes = explode(",", $Billedes); foreach ($id_er_arr as $id) { if (array_key_exists($id, $values)) { echo $Billedes[$i]; $i++; Men det virker hellere ikke :S
25. oktober 2005 - 19:42
#38
$Billedes = explode(",", $Billedes);
25. oktober 2005 - 19:44
#39
Nej, hvis du laver din while-løkke på den måde så overskriver hvert loop jo reultatet fra det forrige. Det jeg menere er at når du lægger i med index 1, 2, 3 så skal de også hentes ud igen på samme måde: $i=1; $i2=1; $values = array(); while ($row = mysql_fetch_assoc($query)) { $Billedes[$i2] = "albums/" .$row['filepath'] ."thumb_" .$row['filename']; $Album[$i2] = $row['aid']; $Pid[$i2] = $row['pid']; $pw[$i2] = $row['pwidth']; $ph[$i2] = $row['pheight']; $i2++; } for ($i3=1; $i3<$i2; $i3++) { echo $Billedes[$i3]; //der kommer mere her der skal bruge de andre variabler... }
25. oktober 2005 - 19:46
#40
Super det virker jo :D
25. oktober 2005 - 19:48
#41
Men række følgen er stadig den samme som da vi startede :(
25. oktober 2005 - 19:50
#42
Ja, for du lægger jo elementerne i dit array sådan som de kommer ud af databasen. Det var jo derfor at vi lavede den kode som gav resultatet i 25/10-2005 19:06:45 - men den går du jo væk fra igen i dit eksempel 25/10-2005 19:40:31?
25. oktober 2005 - 19:52
#43
Okay.. Er helt forvirret nu..
25. oktober 2005 - 19:56
#44
I din løkke - 25/10-2005 19:40:31 - lægger di de enkelte poster ind i dine arrays på pladserne 1, 2, 3, 4 osv. I koden 25/10-2005 18:14:27 bliver de i stedet lagt ind på pladserne 233, 2051, 973, 384 og det er den væsentlige forskel.
25. oktober 2005 - 20:00
#45
Ja men så kan jeg ikke finde ud af det.. Prøver lig engang.
25. oktober 2005 - 20:00
#46
Jeg vil umiddelbart tro at din kode skal se sådan her ud: pageheader($lang_search_php[0]); $pid_er = "233,2051,973,384"; $query = mysql_query("SELECT pid, filename FROM cpg133_pictures WHERE PID IN (" . $pid_er . ")") or die(mysql_error()); $Billedes = array(); $Album = array(); $pw = array(); $ph = array(); while ($row = mysql_fetch_assoc($query) { $pid = $row["pid"]; $Billedes[$pid] = "albums/" . $row['filepath'] . "thumb_" . $row['filename']; $Album[$pid] = $row['aid']; $pw[$pid] = $row['pwidth']; $ph[$pid] = $row['pheight']; } $pid_er_arr = explode(",", $pid_er); foreach ($pid_er_arr as $pid) { if (array_key_exists($pid, $Billedes)) { echo $Billedes[$pid]; } }
25. oktober 2005 - 20:04
#47
while ($row = mysql_fetch_assoc($query))
25. oktober 2005 - 20:05
#48
SUPER det virker :D
25. oktober 2005 - 20:16
#49
Har lige et spm mere.. Så skal jeg nok lade dig være :D.. Har brug for Pid som kolonen hedder i databasen.: $query = mysql_query("SELECT pid, filename, filepath, pwidth, pheight FROM cpg133_pictures WHERE PID IN (" . $pid_er . ")") or die(mysql_error()); $Billedes = array(); $Album = array(); $pw = array(); $ph = array(); $id2 = array(); while ($row = mysql_fetch_assoc($query)) { $id2[$pid] = $row["pid"]; $Billedes[$pid] = "albums/" . $row['filepath'] . "thumb_" . $row['filename']; $Album[$pid] = $row['aid']; $pw[$pid] = $row['pwidth']; $ph[$pid] = $row['pheight']; } $pid_er_arr = explode(",", $pid_er); $i=1; foreach ($pid_er_arr as $pid) { if (array_key_exists($pid, $Billedes, $id2)) { Echo $id2[$pid]; $i++; } Men det er blankt :S . . Hvad gør jeg forkerT? }
25. oktober 2005 - 20:21
#50
Det er jo så smart at pid-feltet netop hedder $pid: $query = mysql_query("SELECT pid, filename, filepath, pwidth, pheight FROM cpg133_pictures WHERE PID IN (" . $pid_er . ")") or die(mysql_error()); $Billedes = array(); $Album = array(); $pw = array(); $ph = array(); while ($row = mysql_fetch_assoc($query)) { $Billedes[$pid] = "albums/" . $row['filepath'] . "thumb_" . $row['filename']; $Album[$pid] = $row['aid']; $pw[$pid] = $row['pwidth']; $ph[$pid] = $row['pheight']; } $pid_er_arr = explode(",", $pid_er); foreach ($pid_er_arr as $pid) { if (array_key_exists($pid, $Billedes, $id2)) { echo $pid; } }
25. oktober 2005 - 20:21
#51
$query = mysql_query("SELECT pid, filename, filepath, pwidth, pheight FROM cpg133_pictures WHERE PID IN (" . $pid_er . ")") or die(mysql_error()); $Billedes = array(); $Album = array(); $pw = array(); $ph = array(); while ($row = mysql_fetch_assoc($query)) { $Billedes[$pid] = "albums/" . $row['filepath'] . "thumb_" . $row['filename']; $Album[$pid] = $row['aid']; $pw[$pid] = $row['pwidth']; $ph[$pid] = $row['pheight']; } $pid_er_arr = explode(",", $pid_er); foreach ($pid_er_arr as $pid) { if (array_key_exists($pid, $Billedes)) { echo $pid; } }
25. oktober 2005 - 20:26
#52
Ja men den er stadig blank :s .. Den udskriver ikke pid. Har lige prøvet.
25. oktober 2005 - 20:28
#53
$query = mysql_query("SELECT pid, filename, filepath, pwidth, pheight FROM cpg133_pictures WHERE PID IN (" . $pid_er . ")") or die(mysql_error()); $Billedes = array(); $Album = array(); $pw = array(); $ph = array(); while ($row = mysql_fetch_assoc($query)) { $pid = $row["pid"]; $Billedes[$pid] = "albums/" . $row['filepath'] . "thumb_" . $row['filename']; $Album[$pid] = $row['aid']; $pw[$pid] = $row['pwidth']; $ph[$pid] = $row['pheight']; } $pid_er_arr = explode(",", $pid_er); foreach ($pid_er_arr as $pid) { if (array_key_exists($pid, $Billedes, $id2)) { echo $pid; } }
25. oktober 2005 - 20:30
#54
Bliver du sur, hvis jeg siger den stadig ikke udskriveR=
25. oktober 2005 - 20:32
#55
Hvorfor skulle jeg blive sur? if (array_key_exists($pid, $Billedes))
25. oktober 2005 - 20:33
#56
over jeg spørger om så meget ;) .. Det virker :D
25. oktober 2005 - 20:38
#57
Jeg var godt klar over hvad du mente - men hvis du ikke skulle have lov til at spørge på Eksperten, hvad er den så beregnet til? ;^)
25. oktober 2005 - 20:43
#58
hehe Takker.. Er lidt i tvivl med point delign.. Ham jgivoni svaret også..
25. oktober 2005 - 20:48
#59
Svar :^)
25. oktober 2005 - 22:51
#60
Håber det okay.. Og tusind tak for hjælpen.
Vi tilbyder markedets bedste kurser inden for webudvikling