Avatar billede Slettet bruger
19. august 2004 - 10:30 Der er 11 kommentarer og
1 løsning

Hente én post fra DB

Hej

Jeg har flere gange brug for at hente én post fra min DB.

I dag gør jeg sådan:

$sql = ("SELECT teaser FROM nyheder
        ORDER BY id DESC
        LIMIT 0,1");

$query_nyhed = mysql_query($sql) or die (mysql_error());

while ($row_nyhed = mysql_fetch_assoc($query_nyhed))
  {
    $teaser = $row_nyhed['teaser'];
  }

Når man henter en enkelt post fra en db, er der så andre bedre måder end en while-løkke?
Avatar billede dennismp Nybegynder
19. august 2004 - 10:43 #1
Hvis du bare vil hente een, så kan du bruge if() istedet for while() (bare erstate while med if) - selvom det ikke kommer til at gøre den store forskel :)
Avatar billede sone Nybegynder
19. august 2004 - 10:52 #2
Hvis du ved hvilken du vil hente ud, så bruge WHERE i SQL.
Avatar billede detox Nybegynder
19. august 2004 - 11:02 #3
Du kan osse bruge mysql_result():

$teaser = mysql_result(mysql_query("SELECT teaser FROM nyheder
        ORDER BY id DESC
        LIMIT 0,1"),0);
Avatar billede Slettet bruger
19. august 2004 - 11:06 #4
detox...> Lige det jeg håbede. Læg et svar :o)
Avatar billede detox Nybegynder
19. august 2004 - 11:23 #5
værsgo'
Avatar billede dennismp Nybegynder
19. august 2004 - 11:24 #6
fejlchecks er ellers en god ting..

istedet ville jeg gøre


function mysql_query_single($sql,$field=null) {
  $res = mysql_query($sql) or die(mysql_error());
  $row = mysql_fetch_assoc($res);
  if( $field === null )
    return null;
  else
    return $row[$field];
}

og så skrive:

$teaser = mysql_query_single($sql,'teaser');
Avatar billede Slettet bruger
19. august 2004 - 15:08 #7
dennismp...> Har fejltjeck lang tid inden jeg kommer til den rutine der bruger denne forespørgsel, så det ville være dobbeltkonfekt.
Avatar billede dennismp Nybegynder
19. august 2004 - 16:46 #8
Ligemeget, dén forespørgsel kan stadig fejle. Og hvis du skal gøre det nogenlunde nemt for dig selv, så burde du, om ikke andet have den brutale måde (or die(mysql_error())) ..

Du kan bare søge her på siden; mange springer det over - og får derved ikke sql-fejlen som mysql returnerer og så kan de ikke få det til at virke, fordi de ikke ser den rigtige fejl og derved søger et forkert sted efter problemet (ofte). At lave en funktion som du bruger istedet, burde da ikke være så svært (funktionen laves jo kun een gang):

$teaser = mysql_query_single("SELECT teaser FROM nyheder ORDER BY id DESC LIMIT 0,1",'teaser');

kontra:

$teaser = mysql_result(mysql_query("SELECT teaser FROM nyheder
        ORDER BY id DESC
        LIMIT 0,1"),0);

Men ok, det er ikke min kode - så jeg skal nok stoppe med at brokke mig :) Bare du holder det væk fra mit :-P
Avatar billede Slettet bruger
20. august 2004 - 13:42 #9
Tjah, det fejltjeck du gerne vil lave, laver jeg tidligere, og er der ingen poster i db, vil jeg slet ikke nå ned og køre forespørgslen, derfor vil siden alt andet lige blive langsommere hvis jeg skal igennem fejltjecket 2 gange hver gang.

or die bruger jeg altid, så fejl i forespørgslen skal jeg nok finde undervejs. :o)
Avatar billede dennismp Nybegynder
20. august 2004 - 14:02 #10
du bruger ikke or die, i detox's løsning. (det er det jeg brokker mig over :)).. Anyway, det er dig der bestemmer :)
Avatar billede Slettet bruger
20. august 2004 - 14:29 #11
Kan godt følge dig, men nu er det jo ikke lige sikkert at jeg bare bruger koden som den står. Det var mere den grundlæggende idé jeg var på udkig efter.

Udsnit af kode:

aabn_sql_og_vaelg_db();

$sql = ("SELECT teaser FROM nyheder
        ORDER BY id DESC
        LIMIT 0,1");

$query_nyhed = mysql_query($sql) or die (mysql_error());
$teaser = mysql_result($query_nyhed,0);

luk_sqlforbindelse();
Avatar billede dennismp Nybegynder
20. august 2004 - 14:38 #12
Ah ok - fair nok. Beklager den unødvendige brokkeri så :)
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