Avatar billede hathor Nybegynder
20. januar 2011 - 04:38 Der er 12 kommentarer og
2 løsninger

Jeg skal afvikle 245 mysql queries - hvordan lettest muligt?

Jeg har en txt fil, der linie for linie indeholder et ID fra en database. Der er 245 ID'er.

Jeg behøver for hvert af de 245 ID'er at lave en mysql query, der siger SELECT felt from TABEL where ID = 'id'

og echo dem ud så det bliver ID efterfulgt af værdien af feltet således:

ID1 felt
ID2 felt
ID3 felt
--- etc
ID 245 felt


Jeg kan slet ikke gennemskue hvordan jeg skal gøre.

Hjælp?
Avatar billede elkoger Nybegynder
20. januar 2011 - 08:56 #1
select id,felt from tabel where id in ('1','2','3'..);
Avatar billede michael_stim Ekspert
20. januar 2011 - 09:08 #2
Er det ikke lettere at bruge between eller større end og mindre end ;o)
Avatar billede michael_stim Ekspert
20. januar 2011 - 09:10 #3
SELECT * FROM tabel WHERE id>0 AND id<246;
SELECT * FROM tabel WHERE id BETWEEN 1 AND 245;
Avatar billede elkoger Nybegynder
20. januar 2011 - 09:23 #4
selfølgelig, tænkte jeg ikke lige på :)
Avatar billede hathor Nybegynder
20. januar 2011 - 12:09 #5
Okay, jeg nævnte ikke at de forskellige ID'er desværre ikke er fortløbende. De spænder fra '8412' til '142002'.

Jeg ville så gerne undgå at skulle skrive 245 forskellige kommandoer. Jeg har tænkt på at lægge dem i et array og loope den samme query, men så ville jeg stadig skulle indskrive de 245 ID'er i det array som $id = array("etarray" => array(ID1 => 8412, ID2 => 10063, ..) etc.



Er der ikke en nemmere måde?
Avatar billede michael_stim Ekspert
20. januar 2011 - 12:33 #6
Hvordan ser din tekstfil ud? Du må kunne tage id fra den og med explode lægge alle id'er i et array.
Avatar billede hathor Nybegynder
20. januar 2011 - 13:20 #7
den ser således ud:

8412 
10063 
16688 
16894 
17050 
17962 
18142 
18815 
22936 
24089 
24274 
24276 
24912 
26197 
26476 
28032 
28953 
29410 
34733 
36592 
38792 
39892 
40941 
41165 
41184 
42192 
42783 
42784 
42810 
42811 
42813 
42844 
42845 
42846 
42989 
42998 
43001 
43003 
43004 
43007 
43008 
43010 
43011 
43163 
43166 
43820 
43821 
43822 
43823 
44024 
44025 
44192 
46818 
46827 
46830 
46831 
46832 
47020 
47023 
47024 
48213 
49449 
52812 
52991 
53735 
53907 
55647 
55649 
57344 
57348 
57351 
57356 
57370 
57399 
57427 
57725 
57726 
58000 
58123 
58184 
58422 
58952 
59008 
59161 
59165 
59420 
59698 
59700 
59709 
59711 
59712 
59739 
59748 
59760 
59762 
59978 
60229 
60250 
60251 
60258 
60276 
60277 
60324 
60349 
60356 
60357 
60358 
60791 
60799 
66879 
69998 
70702 
71232 
71233 
71234 
71235 
71236 
72164 
72442 
72875 
75904 
75993 
75994 
76134 
76189 
76223 
76723 
76725 
76954 
76955 
77354 
77355 
77356 
78015 
78016 
78335 
79254 
80064 
82086 
82753 
86179 
87862 
89649 
89664 
89817 
89865 
90509 
90555 
90571 
90573 
90574 
90594 
90688 
90808 
90840 
90848 
90850 
90871 
90885 
91148 
91149 
91150 
91152 
91205 
91224 
91229 
91230 
91269 
91331 
91597 
92592 
92593 
92594 
92858 
93580 
94833 
95514 
95686 
97186 
97187 
97531 
97546 
97550 
97555 
97565 
97569 
99007 
99031 
99038 
99058 
100184 
100463 
100464 
100465 
102280 
102281 
102282 
102283 
102284 
102901 
102926 
103605 
103610 
106609 
109392 
109606 
109667 
110701 
111479 
115517 
115518 
115526 
117055 
117751 
118538 
122474 
122683 
122684 
122685 
122686 
125787 
126291 
126292 
126293 
126322 
126571 
127816 
131597 
133794 
133824 
133872 
134104 
134131 
134171 
134291 
135298 
135435 
135721 
137992 
138374 
138384 
138737 
141367 
141387 
142002
Avatar billede tjens Nybegynder
20. januar 2011 - 13:36 #8
Hvis du kan lægge tekstfilen på samme maskine som PHP kører på, kan du lave dit loop, mens du læser filen en linie ad gangen: http://php.net/manual/en/function.fgets.php
Avatar billede michael_stim Ekspert
20. januar 2011 - 14:09 #9
Så exploder du på linieskift (\n).
Avatar billede mons Nybegynder
20. januar 2011 - 16:32 #10
Gem txt filen som en csv-fil og importer den til mysql.databasen, så er resten barnemad.
Avatar billede hathor Nybegynder
20. januar 2011 - 17:20 #11
Tak for hjælpen, I er fandme guld værd. Jeg har lavet dette lille script. Det er muligvis kluntet, men det opfylder formålet til fulde:

<?php
    include_once '../includes/db.inc.php';
   
    $f = fopen ("id.txt", "r");
    $ln= 0;
    while ($line= fgets ($f)) {
        ++$ln;
       
        echo "<br>";
        if ($line===FALSE) print ("FALSE\n");
        else print ($line);
        echo "<br>";
        $po = $db->get_results("SELECT bruger, thumb from table WHERE id = '$line' AND status_skift != ''");
        foreach ( $po as $output ){
        $bruger = $output->bruger;
        $thumb = $output->thumb;
        }
        echo $bruger;
        echo "<br>";
        echo $thumb;
        echo "<br>";
    }
    fclose ($f);
?>


Smid svar, så er der point. Jeg afsætter flere, alle har været så rare til at hjælpe.
Avatar billede hathor Nybegynder
20. januar 2011 - 17:28 #12
Mons, jeg ville gerne gøre som du siger med CSV, og jeg har rækken af ID'er fra et CSV dump jeg har lavet med et lille script, men jeg er havnet i dette her ad omveje.

Jeg er ikke webudvikler eller det, der ligner, jeg er musiker, og arbejder på dette her for en person der behøver min hjælp. Vedkommende der udviklede den side det foregår på, døde meget pludseligt i en alt for ung alder, og da jeg skrev lidt php for 10 - 12 år siden, hjælper jeg i en snæver vending.

Derfor tør jeg ikke begive mig ud i alt for meget hvad angår MySQL halløj, for siden har omtrent 10.000 betalende brugere, og det ville være en katastrofe hvis jeg ødelagde noget.

De 245 poster det drejer sig om her, er 245 poster i en tabel med omtrent 200.000 poster, hvor der netop på disse 245 poster er en fejl i det billede der skal vises ved dem.

Scriptet her, skal bruges til at dumpe filnavnet på det rigtige billede for hvert ID fra en back-up og indsætte billedet i tabellen.
Avatar billede mons Nybegynder
20. januar 2011 - 17:53 #13
Held og lykke!!
Avatar billede tjens Nybegynder
20. januar 2011 - 20:08 #14
Godt du kom videre.
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