У меня есть этот код, если я выполняю его в phpmyadmin, он работает хорошо, но когда я пробую его в php, он просто не работает. Возвращает "0 результатов".
SQL:
SET @felhasz := (SELECT user_id FROM 'items_subtitles' GROUP BY user_id ORDER BY SUM(status) DESC LIMIT 1);SELECT displayname FROM 'users' WHERE id=@felhasz;
PHP:
$sql = "SET @felhasz := (SELECT user_id FROM 'items_subtitles' GROUP BY user_id ORDER BY SUM(status) DESC LIMIT 1);SELECT displayname FROM 'users' WHERE id=@felhasz;";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "" . $row["displayname"];
}
} else {
echo "0 results";
}
Вы не можете выполнить несколько запросов за один вызов query()
. Вместо этого разделите ваш запрос на два вызова, например:
$sql = "SET @felhasz := (SELECT user_id FROM 'items_subtitles' GROUP BY user_id ORDER BY SUM(status) DESC LIMIT 1);";
$conn->query($sql) or die($conn->error);
$sql = "SELECT displayname FROM 'users' WHERE id=@felhasz;";
$result = $conn->query($sql);
Или вы можете просто объединить их в один, заменив переменную во втором запросе значением из первого:
$sql = "SELECT displayname FROM 'users' WHERE id=(SELECT user_id FROM 'items_subtitles' GROUP BY user_id ORDER BY SUM(status) DESC LIMIT 1);";
$result = $conn->query($sql);
Обратите внимание, что вы также можете использовать multi_query()
но это усложняет получение результирующего набора из второго запроса (см. Руководство по этому вопросу).