Avatar billede henrik6666 Nybegynder
21. februar 2007 - 17:24 Der er 28 kommentarer og
1 løsning

Hente data

Hvordan kan jeg gøre det her på en bedre måde ?

$result = mysql_query("select antal from liste where nr = '1'");
$data    = mysql_fetch_array($result);

$result = mysql_query("select antal from liste where nr = '2'");
$data    = mysql_fetch_array($result);

$result = mysql_query("select antal from liste where nr = '3'");
$data    = mysql_fetch_array($result);

osv, osv ..
Avatar billede kalp Novice
21. februar 2007 - 17:29 #1
$result = mysql_query("select antal from liste");
$data    = mysql_fetch_array($result);
Avatar billede kalp Novice
21. februar 2007 - 17:34 #2
hvis du ved der f.eks er fra 1-20 så kan det smide i en løkke.
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 17:39 #3
Jeg kender antallet. Udtrækket skal hente data hvor nr er fra 1 til 9 men i næste udtræk vil jeg gerne hente data hvor nr er fra 10-41 osv, osv ..

Så hvordan laver jeg så en løkke ?
Avatar billede kalp Novice
21. februar 2007 - 17:59 #4
$slut = 9;
$start = 1;
while($start<$slut)
{
$result = mysql_query("select antal from liste where nr = '"+ $start +"'");
$start++;
}

sådan ca.:)
Avatar billede simplus Nybegynder
21. februar 2007 - 18:01 #5
Prøv:

<?php
$i = 1;
while($i < 10)
{
    $result = mysql_query("SELECT antal FROM liste WHERE nr = '$i'");
    $data  = mysql_fetch_array($result);
    $i++;
}
?>
Avatar billede simplus Nybegynder
21. februar 2007 - 18:02 #6
Glemte at opdatere, men qawi's virker sikkert også :-)
Avatar billede kalp Novice
21. februar 2007 - 18:20 #7
ja kun hvis jeg har smidt variablen start rigtigt ind i sql'en:P
jeg troede den ville tolke det som tekst hvis man gjorde som dig:)
er nu heller ikke inde i PHP (faktisk det mindst kan lide af alt jeg har rørt)
Avatar billede simplus Nybegynder
21. februar 2007 - 18:24 #8
Nope, den tolker det som en variabel fordi det er inde i en query. Hvis det var ren SQL havde den selvfølgelig ikke virket efter hensigten. :-)
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 18:43 #9
Okay - det ser godt ud og jeg tester det med det samme. Er det muligt at få lagt udtrækkene sammen da det er "almindelige" tal der fremkommer ..
Avatar billede kalp Novice
21. februar 2007 - 18:45 #10
fra 1-41 springer du ikke nogle tal over.. så kan ikke se hvorfor du laver 2 udtræk på det samme:S
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 18:51 #11
Udtrækkene (tallene) skal lægges sammen og resultaterne har intet med hinanden at gøre så jeg har det bedre hvis det adskilles lidt :o)
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 19:15 #12
Nu har jeg prøvet begge eksempler uden større succes - er det muligt at tage fat i et af eksemplerne og 'echo' de 9 forskellige tal der udtrækkes ? Måske jeg så bedre kan se fidusen ..
Avatar billede simplus Nybegynder
21. februar 2007 - 19:21 #13
Hvad mener du med 'uden større succes'?
- Får du fejl? Virker det ikke? Hvad går galt?

Måske kan det have noget at gøre med at vi begge har glemt at lave selve udtrækket? :-)

<?php
$i = 1;
while($i < 10)
{
    $result = mysql_query("SELECT antal FROM liste WHERE nr = '$i'");
    $data  = mysql_fetch_array($result);
    echo $data['antal'];
    $i++;
}
?>
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 19:45 #14
Kan man ikke opdele $data['antal'] i forskellige variabler ? Så er det nemmere for mig at lægge dem sammen ;-) Men det er også nemmere for mig at udskrive de enkelte resultater hvor jeg vil ha' dem, for som det er nu kommer alle tallene i en lang række ..
Avatar billede simplus Nybegynder
21. februar 2007 - 20:30 #15
Jo du kan sagtens dele dem med explode();

her er et eksempel:

<?php
$string  = "Denne sætning skal deles ved hvert mellemrum";
$stykker = explode(" ", $string);
echo $stykker[0]; // indeholder "Denne"
echo $stykker[1]; // indholder "sætning"
echo $stykker[2]; // indholder "skal"
// osv. osv.
?>

Jeg forstår dog ikke helt hvorfor du skal bruge det?

med hensyn til at de kommer i en lang linie kan du gøre således istedet:

<?php
$i = 1;
while($i < 10)
{
    $result = mysql_query("SELECT antal FROM liste WHERE nr = '$i'");
    $data  = mysql_fetch_array($result);
    echo $data['antal']."<br>";
    $i++;
}
?>
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 20:54 #16
Jeg er mere interesseret i at explode $data['antal'] i det her eksempel og uden <br> for det begrænser min frihed til hvad jeg finder på at udskrive og hvor på siden jeg ønsker det :

<?php
$i = 1;
while($i < 10)
{
    $result = mysql_query("SELECT antal FROM liste WHERE nr = '$i'");
    $data  = mysql_fetch_array($result);
    $i++;
}
?>

Nu har jeg fjernet echo og når løkken er kørt igennem 9 gange findes der så ikke en streng jeg kan explode så samtlige 9 resultater kan udskrives i hver deres variabel ? Man kan måske ikke gøre det ???
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 21:01 #17
Den eneste grund til at jeg vil indføre explode er at jeg skal ha' lagt tallene sammen - hvis det kan være en hjælp :-)
Avatar billede simplus Nybegynder
21. februar 2007 - 21:07 #18
Hmm, du kan indsætte alt fra $data['antal'] i en variabel - brug evt. array()
og når alt er samlet laver du en explode()
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 21:09 #19
Er det noget du kan vise og indsætte i eksemplet for jeg kan ikke hitte ud af det :o)
Avatar billede simplus Nybegynder
21. februar 2007 - 21:20 #20
tjoh, men jeg ville nu hellere bruge mysql count i dit tilfælde:

mysql_query("SELECT COUNT(antal) FROM liste WHERE nr = '$i'");
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 21:29 #21
Ja - det er endnu bedre og også derfor jeg postede spørgsmålet i MySQL katagorien :-) Prøver lige selv først med dit input ..
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 21:42 #22
Der sker ligesom ikke noget med den her kode sammensætning og tæller den ikke bare hvormange gange forekomsten af $i findes .. altså 9 ???? :

<?php
$i = 1;
while($i < 10)
{
    $result = mysql_query("SELECT COUNT(antal) FROM liste WHERE nr = '$i'");
    $data  = mysql_fetch_array($result);
    echo $data['antal'];
    $i++;
}
?>
Avatar billede simplus Nybegynder
21. februar 2007 - 21:54 #23
prøv

SELECT COUNT(*) AS antal FROM liste

istedet
Avatar billede henrik6666 Nybegynder
21. februar 2007 - 22:07 #24
Der kommer 9 flotte 1-taller som dog ikke er de rigtige tal ;-)
Avatar billede simplus Nybegynder
21. februar 2007 - 22:21 #25
altså jeg tror ikke følgene er muligt, men det er det eneste jeg kan komme i tanke om lige nu (er igang med svære matematik opgaver nemlig) er at samle dem i et array

prøv følgene

$data = $data['antal'].",";
$res = array($data['antal']);
$newres = explode(",", $res);

og du spørger måske hvor den skal indsættes, mit svar er lige efter din sql. Dvs at den skal indsættes der hvor det skal udskrives.

Ellers må jeg lige kigge nærmere på det senere (måske ikke iaften)

:-)
Avatar billede simplus Nybegynder
21. februar 2007 - 22:22 #26
den skulle så selvfølgelig se således ud:

$data = $data['antal'].",";
$res = array($data);
$newres = explode(",", $res);
Avatar billede henrik6666 Nybegynder
22. februar 2007 - 11:00 #27
Jeg kunne ikke få dit sidste input til at virke og jeg har her i nattens muld og mørke lavet udtrækket som vist øverst - et lille fint 700 liniers dok.

Så jeg lukker - smid lidt svar så jeg kan uddele point.

Men jeg spørger garanteret igen - for når jeg tænker tilbage er det en ofte tilbagevendende problemstilling, det er få splittet et udtræk op i et brugbar array eller at få forenklet måden at skrive det på.

Tak for hjælp ..
Avatar billede simplus Nybegynder
22. februar 2007 - 11:43 #28
Ingen point til mig tak, det løste heller ikke dit problem.

Snup dem selv. :-)
Avatar billede henrik6666 Nybegynder
24. februar 2007 - 14:49 #29
..
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