Я пытаюсь получить последнюю информацию о каком-то конкретном человеке, и я использую такой запрос, как
SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID DESC LIMIT 1
а также
SELECT * FROM Table WHERE Name LIKE 'Mary' ORDER BY ID DESC LIMIT 1
потому что в таблице каждый день будут вставлять новые данные для другого человека в момент его обновления (для записи справки), поэтому я хотел бы распечатать несколько последних сведений о последних событиях с помощью "ORDER BY ID DESC LIMIT 1",
Я попытался распечатать его с помощью "mysqli_multi_query" и "mysqli_fetch_row"
лайк
$con=mysqli_connect($localhost,$username,$password,'Table');
$sql = "SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID
DESC LIMIT 1 ";
$sql .= "SELECT * FROM Table WHERE Name LIKE 'Mary' ORDER BY ID
DESC LIMIT 1";
// Execute multi query
if (mysqli_multi_query($con,$sql))
{
do
{
// Store first result set
if ($result=mysqli_store_result($con)) {
// Fetch one and one row
while ($row=mysqli_fetch_row($result))
{
echo '<tr>'; // printing table row
echo '<td>'.$row[0].'</td>';
echo '<td>'.$row[1].'</td>';
echo '<td>'.$row[2].'</td>';
echo '<td>'.$row[3].'</td>';
echo '<td>'.$row[4].'</td>';
echo '<td>'.$row[5].'</td>';
echo '<td>'.$row[6].'</td>';
echo '<td>'.$row[7].'</td>';
echo '<td>'.$row[8].'</td>';
echo '<td>'.$row[9].'</td>';
echo '<td>'.$row[10].'</td>';
echo '<td>'.$row[11].'</td>';
echo '<td>'.$row[12].'</td>';
echo '<td>'.$row[13].'</td>';
echo '<td>'.$row[14].'</td>';
echo'</tr>'; // closing table row
}
// Free result set
mysqli_free_result($result);
}
}
while (mysqli_next_result($con));
}
mysqli_close($con);
?>
На странице результатов не отображается сообщение об ошибке, но результаты не печатаются. Индивидуальные запросы были протестированы.
Пожалуйста, посоветуйте, большое спасибо
Есть ли другой способ сохранить запрос простым, поэтому нет необходимости использовать mysqli_multi_query?
Это должно сработать для вас:
$con = mysqli_connect($localhost,$username,$password,'Table');
// Make a simple function
function personInfo($con, $sql)
{
$result = mysqli_query($con, $sql);
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
echo '<table>
<tr>';
for($i=0; $i < count($row); $i++) echo '<td>'.$row[$i].'</td>';
echo '</tr>
</table>';
}
}
}
$sql1 = "SELECT * FROM Table WHERE Name='Peter' ORDER BY ID DESC LIMIT 1 ";
$sql2 = "SELECT * FROM Table WHERE Name='Mary' ORDER BY ID DESC LIMIT 1";
// Simply call the function
personInfo($con, $sql1);
personInfo($con, $sql2);
Лучшая практика показывает, что вы всегда должны стремиться к наименьшему количеству вызовов в базе данных для любой задачи.
По этой причине подходит JOIN-запрос.
SELECT A.* FROM test A INNER JOIN (SELECT name, MAX(id) AS id FROM test GROUP BY name) B ON A.name=B.name AND A.id=B.id WHERE A.name IN ('Peter','Mary')
Это вернет нужные строки в одном запросе в одном наборе результатов, который затем можно будет повторить и отобразить.
Вот демоверсия sqlfiddle: http://sqlfiddle.com/#!9/2ff063/3
Ps Не используйте LIKE, когда вы ищете значения без переменных. Я имею в виду, только использовать его, когда _
или %
логически требуется.