Reputation: 5118
I have couple auto increment s.no
and respective names
in my mysql database.
Currently the queries
written are like below.
$result = mysql_query ("SELECT name FROM table WHERE s.no= '1'") or die (mysql_error ());
while($row = mysql_fetch_array($result)){
$name1= $row['name'];
}
$result = mysql_query ("SELECT name FROM table WHERE s.no= '2'") or die (mysql_error ());
while($row = mysql_fetch_array($result)){
$name2= $row['name'];
}
How could this be optimized, to have a single query and assign name1
from s.no=1
, nameN
from s.no=N
??
Upvotes: 1
Views: 92
Reputation: 31854
$sql = "SELECT name FROM table WHERE s.no IN ('1', '2') order by s.no asc";
$result = mysql_query($sql);
$name1 = mysql_result($result, 0, 0);//fetches row 0, column 0
$name2 = mysql_result($result, 1, 0);//fetches row 1, column 0
http://php.net/manual/en/function.mysql-result.php
Upvotes: 0
Reputation: 12123
Pardon my PHP, but something like this would work.
$name = [];
$result = mysql_query ("SELECT s.no, name FROM table") or die (mysql_error ());
while($row = mysql_fetch_array($result)) {
$index = $row['no'];
$name[$index] = $row['name'];
}
I had to do something similar recently in java where I used a Map to keep track of logical "groups" in a batch query. The code above uses the same idea.
If you're only looking to get rows for s.no in (1, 2), then as the poster above says you can use an IN clause.
Upvotes: 0
Reputation: 2151
$result = mysql_query ("SELECT name,s.no numb FROM table WHERE s.no= '1' OR s.no= '2'") or die (mysql_error ());
while($row = mysql_fetch_array($result)){
if($row['numb']==1)
$name1= $row['name'];
else if($row['numb']==2)
$name2= $row['name'];
}
Upvotes: 0
Reputation: 191058
You could do this with an IN
clause.
SELECT name, s.no as no FROM table WHERE s.no IN ('1', '2')
Then, dynamically look up the variable with the string.
$varName = 'name'.$row['no'];
$$varName = $row['name];
Upvotes: 5