SQL выбирает несколько массивов и заполняет одну таблицу

#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; , но я неправильно применил его и не получил никаких результатов, поэтому предположил, что это невозможно..