Привет, я (начало) php backend dev, и я работаю над панелью dj, но он не работает правильно, я пробовал столько вещей, сколько мог, но я не могу заставить его работать.
$active_ids = '1, 3, 4'; $query = "SELECT * FROM users WHERE id IN ({$active_ids})"; $result = $mysqli->query($query); $query2 = "SELECT dj, count(*) AS n FROM timetable WHERE dj IN ({$active_ids}) GROUP BY dj"; $result2 = $mysqli->query($query2); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()){ echo "<tr>"; echo "<td>", $row['username'] ,"</td>"; } if ($result2->num_rows > 0) { while($row2 = $result2->fetch_assoc()){ echo "<td>", $row2['n'] ,"</td>"; echo "</tr>"; } } }
это то, что он показывает
ZOMBOY Hater ZOMBOY2 3 1 1
и вот как это должно стать, но я не могу найти способ сделать это
ZOMBOY 3 Hater 1 ZOMBOY2 1
Вы можете использовать join
вместо запроса к двум таблицам
$active_ids = '1, 3, 4'; $query = "SELECT u.username, count(*) AS n FROM users u, timetable tt WHERE u.id=tt.dj and u.id IN ({$active_ids}) GROUP BY tt.dj"; $result = $mysqli->query($query); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()){ echo "<tr>"; echo "<td>", $row['username'] ,"</td>"; echo "<td>", $row['n'] ,"</td>"; echo "</tr>"; } }
Вы можете сделать это так, но должны выглядеть
$active_ids = '1, 3, 4'; $query = "SELECT * FROM users WHERE id IN ({$active_ids})"; $result = $mysqli->query($query); $query2 = "SELECT dj, count(*) AS n FROM timetable WHERE dj IN ({$active_ids}) GROUP BY dj"; $result2 = $mysqli->query($query2); $columnOne = Array(); $columnTwo = Array(); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()){ $columnOne[]= $row['username']; } if ($result2->num_rows > 0) { while($row2 = $result2->fetch_assoc()){ $columnTwo[] = row2['n']; } } } echo '<table>'; for($i=0;$i<count($columnOne);$i++){ echo '<tr><td>' . $columnOne[$i] . '</td><td>' . $columnTwo[$i] . '</td></tr>'; } echo '</table>';
Вы могли бы попробовать что-то вроде этого (не так элегантно, как другие):
# Escape your characters $active_ids = "'1', '3', '4'"; # Tidy up the querys to reduce the change of reserved words being used $query = "SELECT * FROM `users` WHERE `id` IN ({$active_ids});"; $result = $mysqli->query($query); $query2 = "SELECT `dj`, COUNT(*) AS n FROM `timetable` WHERE `dj` IN ({$active_ids}) GROUP BY `dj`"; $result2 = $mysqli->query($query2); # Count your results $c1 = count($result); $c2 = count($result2); #Set the counter to be the larger of the 2 $counter = (($c1 > $c2) ? $c1 : $c2); if ($result->num_rows > 0 && $result2->num_rows > 0) { # Print the table opener print '<table class="your_class">'; # Loop through your results for ($i = 0; $i < $counter; $i++) { # Print the data needed print '<tr><td>' . $result[$i]['username'] . '</td><td>' . $result2[$i]['n'] . '</td></tr>'; } # End the table print '</table>'; }