Вот мой текущий код. Я пытаюсь отобразить данные из трех отдельных запросов в одну таблицу с несколькими столбцами. Является ли мое выражение неверным здесь? Он печатает 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>";
$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 разных строки одновременно, вы должны сделать их индивидуально и сохранить их в локальной переменной, просто отключите переменную после слов, если ее большой массив.
мой код предлагается как непроверенный.
Цикл while принимает предложение OR. Это означает, что если первый возвращает true, он не будет выполнять второй.
&&
)
Это потребует открытия трех отдельных подключений к 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