webForumDet fria alternativet

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

PHP

6 svar · 435 visningar · startad av swede

Medlem sedan feb. 2004230 inlägg
Frågan#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

Medlem 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"];
Medlem sedan juni 200032 967 inlägg
#3

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

Medlem sedan feb. 2004230 inlägg
#4

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

Medlem sedan juni 20006 031 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

Medlem sedan juni 200032 967 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.

Medlem 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);

270 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)