#php #sql
#php #sql
Вопрос:
Я пытаюсь заполнить 1 таблицу результатами из 2 запросов выбора, но из той же таблицы. Это не работает, один заполняет другой, показывает только один результат.. Возможно ли это сделать за один выбор, поскольку я думаю, что проблема связана с использованием двух ассоц выборки.
Вопрос: Как мне получить результат обоих этих запросов, представленных в созданной мной таблице?
<table align="left" style="width: auto; min-width: 700px; margin-bottom:20px;" class="deftable">
<thead><tr>
<th colspan="4">Top 10 users</th>
</tr>
</thead>
<thead><tr>
<th colspan="2">Top 10 Richest users</th>
<th colspan="2">Top 10 Bananaslappers</th>
</tr>
</thead>
<thead>
<tr><th>Name</th>
<th>Bananas</th>
<th>Name</th>
<th>Total slapped</th>
</tr></thead><tbody>
<?php
$stmt88 = $mysqli->prepare("SELECT naam,geld FROM `gebruikers` ORDER BY geld DESC LIMIT 10 ");
$stmt88->execute();
$result = $stmt88->get_result(); //only works when nd_mysli is set on the server!
$stmt88->close();
while ($rowrich = $result->fetch_assoc()) {
$stmt89 = $mysqli->prepare("SELECT naam,user_amountslapped FROM `gebruikers` ORDER BY user_amountslapped DESC LIMIT 10 ");
$stmt89->execute();
$result2 = $stmt89->get_result(); //only works when nd_mysli is set on the server!
$stmt89->close();
while ($rowrich2 = $result2->fetch_assoc()) {
?>
<tr><td >
<a class="online" href="profile.php?username=<?= htmlspecialchars($rowrich['naam']) ?>"><b><?= htmlspecialchars($rowrich['naam']) ?></b></a></td>
<td>amp;#127820;<?= htmlspecialchars(number_format($rowrich['geld'],0,",",".")) ?></td>
<td >
<a class="online" href="profile.php?username=<?= htmlspecialchars($rowrich2['naam']) ?>"><b><?= htmlspecialchars($rowrich2['naam']) ?></b></a></td>
<td>amp;#127820;<?= htmlspecialchars(number_format($rowrich2['user_amountslapped'],0,",",".")) ?></td>
</tr>
</tbody>
<? } }?></table><br>
Комментарии:
1. Я думаю, это должно сработать. Вы должны получить 100 строк с каждой комбинацией результатов двух запросов.
2. 100 строк? Мне нужны 10 лучших запросов, упорядоченных по Geld, и 10 лучших запросов, упорядоченных по user_amountslapped. Я действительно получаю все результаты много раз.. Так что все идет не так, как надо..
3. Но у вас есть вложенные циклы, которые создают перекрестный продукт.
4. Для каждой строки, возвращенной первым запросом, вы возвращаете 10 строк из второго запроса.
5. Ну вот тут-то я и ошибаюсь … Как это сделать так, чтобы он давал только топ-10 из обоих?
Ответ №1:
У вас не должно быть вложенных циклов, которые создают перекрестный продукт между двумя результатами, а не обрабатывают их параллельно.
У вас должен быть один цикл, который извлекает строку из каждого запроса.
<?php
$stmt88 = $mysqli->prepare("SELECT naam,geld FROM `gebruikers` ORDER BY geld DESC LIMIT 10 ");
$stmt88->execute();
$result = $stmt88->get_result(); //only works when nd_mysli is set on the server!
$stmt88->close();
$stmt89 = $mysqli->prepare("SELECT naam,user_amountslapped FROM `gebruikers` ORDER BY user_amountslapped DESC LIMIT 10 ");
$stmt89->execute();
$result2 = $stmt89->get_result(); //only works when nd_mysli is set on the server!
$stmt89->close();
while (($rowrich = $result->fetch_assoc()) amp;amp; ($rowrich2 = $result2->fetch_assoc())) {
?>
<tr><td >
<a class="online" href="profile.php?username=<?= htmlspecialchars($rowrich['naam']) ?>"><b><?= htmlspecialchars($rowrich['naam']) ?></b></a></td>
<td>amp;#127820;<?= htmlspecialchars(number_format($rowrich['geld'],0,",",".")) ?></td>
<td >
<a class="online" href="profile.php?username=<?= htmlspecialchars($rowrich2['naam']) ?>"><b><?= htmlspecialchars($rowrich2['naam']) ?></b></a></td>
<td>amp;#127820;<?= htmlspecialchars(number_format($rowrich2['user_amountslapped'],0,",",".")) ?></td>
</tr>
</tbody>
<? } ?></table><br>
Обратите внимание, что если какой-либо из запросов возвращает менее 10 строк, таблица остановится на более короткой длине. Если вам нужна более длинная длина, используйте ||
в while
условии, а затем проверьте, является ли $rowrich
или $rowrich2
пустым, прежде чем выводить эти столбцы.
Комментарии:
1. Это дает мне тот же результат. Мне не нужно 100, я понимаю, что способ, которым я пытался, не подходит. Мне нужны 10 лучших результатов обоих результатов, и я не могу понять, как это сделать..
2. Спасибо! вот и все. Я также думал об использовании amp;amp; , но я неправильно применил его и не получил никаких результатов, поэтому предположил, что это невозможно..