Несколько запросов данных в одну таблицу HTML (PHP, MySQL)

0

Вот мой текущий код. Я пытаюсь отобразить данные из трех отдельных запросов в одну таблицу с несколькими столбцами. Является ли мое выражение неверным здесь? Он печатает 1 таблицу данных, затем одну за ней, а не рядом с ней в той же строке.

echo "<table border='1'>
<tr>
<TH COLSPAN=2>July 2010</TH>
<TH COLSPAN=2>August 2010</TH>
<TH COLSPAN=2>September 2010</TH>
</tr>
<tr>
<th>User</th>
<th>Posts</th>
<th>User</th>
<th>Posts</th>
<th>User</th>
<th>Posts</th>
</tr>";

while (($row = mysql_fetch_assoc($july)) || ($row2 = mysql_fetch_assoc($aug)) || ($row3 = mysql_fetch_assoc($sept))) {
echo "<tr>";
echo "<td>" . $row['cUsername'] . "</td>";
echo "<td>" . $row['postCount'] . "</td>";
echo "<td>" . $row2['cUsername'] . "</td>";
echo "<td>" . $row2['postCount'] . "</td>";
echo "<td>" . $row3['cUsername'] . "</td>";
echo "<td>" . $row3['postCount'] . "</td>";
echo "</tr>";
}

echo "</table>";
  • 1
    Расскажите подробнее о том, что вы хотите сделать именно потому, что, я думаю, вы делаете это неправильно.
  • 0
    Я пытаюсь разместить данные из 3 отдельных запросов SQL в одну таблицу HTML.
Теги:

3 ответа

2
Лучший ответ
$data = array();

while($row = mysql_fetch_assoc($july)) {$data['row'][] = $row;}
while($row = mysql_fetch_assoc($aug))  {$data['row2'][] = $row;}
while($row = mysql_fetch_assoc($sept)) {$data['row3'][] = $row;}

$count = count($data['row']);

for($i=0;$i<=$count;$i++)
{
    echo '<tr>';
        if(($i % 3) == 1)
        {
            echo "<td>" . $data['row3'][$i]['cUsername'] . "</td>";
            echo "<td>" . $data['row3'][$i]['postCount'] . "</td>";
        }else if(($i % 2) == 1)
        {
            echo "<td>" . $data['row2'][$i]['cUsername'] . "</td>";
            echo "<td>" . $data['row2'][$i]['postCount'] . "</td>";
        }else /*Never try find remainder of 1 as theres always a multiple of 1*/
        {
            echo "<td>" . $data['row'][$i]['cUsername'] . "</td>";
            echo "<td>" . $data['row'][$i]['postCount'] . "</td>";
        }
    echo '</tr>';
}

Получая результаты индивидуально в локальный массив, вместо того, чтобы пытаться извлечь 3 разных строки одновременно, вы должны сделать их индивидуально и сохранить их в локальной переменной, просто отключите переменную после слов, если ее большой массив.

мой код предлагается как непроверенный.

1

Цикл while принимает предложение OR. Это означает, что если первый возвращает true, он не будет выполнять второй.

  • 0
    Спасибо Данте, как мне заставить ВСЕХ из них работать?
  • 0
    Вы должны использовать и оператор ( && )
Показать ещё 1 комментарий
0

Это потребует открытия трех отдельных подключений к MySQL aтв, запускающих три запроса, каждый из которых в своем собственном подключении.

Лучше перепишите свой запрос в качестве

SELECT  user_id,
        (
        SELECT  COUNT(*)
        FROM    posts p
        WHERE   p.user_id = u.user_id
                AND p.date >= '2010-06-01'
                AND p.date < '2010-07-01'
        ) AS june_count,
        (
        SELECT  COUNT(*)
        FROM    posts p
        WHERE   p.user_id = u.user_id
                AND p.date >= '2010-07-01'
                AND p.date < '2010-08-01'
        ) AS july_count,
        (
        SELECT  COUNT(*)
        FROM    posts p
        WHERE   p.user_id = u.user_id
                AND p.date >= '2010-08-01'
                AND p.date < '2010-09-01'
        ) AS aug_count
FROM    users u

Ещё вопросы

Сообщество Overcoder
Наверх
Меню