webForumDet fria alternativet

SQL fråga med bara 1 rad som svar...

PHPur PHP

6 svar · 435 visningar · startad av swede

swedeMedlem sedan feb. 2004230 inlägg
#1

Hur skriver jag snyggast om min sql fråga bara ska (bör) resultera i en rad?

Normalt skriver jag något liknande såhär:

$query = "SELECT name FROM adressesad WHERE id =" . $id;
$result = mysql_query($query, $link) or Die ('Could not select : ' . mysql_error());
      
while ($row = mysql_fetch_assoc($result)) {
   $name = new name($row["name"]);
   $names[] = $name;
}
      
mysql_free_result($result);
return $names

Vilket kommer att returnera en array med namn objekt.

Men hur skriver jag om min SQL bara ska / kan / bör returnera 1 rad?

En lösning är att låta while satsen vara kvar och bara plocka ut det sista
resultatet typ så här:

<snip>
while ($row = mysql_fetch_assoc($result)) {
   $name = new name($row["name"]);
}
</snip>
return $name;

Är det så jag bör göra eller finns det något bättre sätt?

//S

K@llenMedlem sedan mars 20032 667 inlägg
#2

Om id är unikt får du ju bara en träff på din fråga och då kan du skriva:

$query = "SELECT name FROM adressesad WHERE id =" . $id
$result = mysql_query($query, $link) or Die ('Could not select : ' . mysql_error());
      
$row = mysql_fetch_array($result);
$name = $row["name"];
@ndersMedlem sedan juni 200032 969 inlägg
#3

Du kan använda LIMIT för att begränsa antalet poster i resultatet.

swedeMedlem sedan feb. 2004230 inlägg
#4

Om jag använder LIMIT 1, får jag då den första träffen ur tabellen?

PeddaMedlem sedan juni 20006 032 inlägg
#5

LIMIT 1 returnerar första träffen.

Finns det flera id som kan vara samma verkligen?
Om id är unikt så kan du strunta i LIMIT och din while sats och använda mysql_fetch_assoc istället för mysql_fetch_array

@ndersMedlem sedan juni 200032 969 inlägg
#6

Om jag använder LIMIT 1, får jag då den första träffen ur tabellen?

Inte nödvändigtvis. Det beror på vad du använder för sortering / ORDER BY. Man kan aldrig vara säker på i vilken ordning en databas returnerar poster om man inte använder order by.

aasahMedlem sedan mars 20034 471 inlägg
#7

Du kan ju också försäkra dig om att det faktiskt fanns en rad (minst) genom att skriva:

if ($row = mysql_fetch_assoc($result)) { 
   $name = new name($row["name"]); 
}

Och om du vill kolla hur många rader du har i resultatet kan du använda mysql_num_rows($res);

133 ms totalt · 3 externa anrop · v20260731065814-full.c74b5be1
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)