swedeMedlem sedan feb. 2004230 inlägg 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 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 Du kan använda LIMIT för att begränsa antalet poster i resultatet.
swedeMedlem sedan feb. 2004230 inlägg Om jag använder LIMIT 1, får jag då den första träffen ur tabellen?
PeddaMedlem sedan juni 20006 032 inlägg 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
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 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);