Выполнение запроса MYSQL
Задача запроса вывески количество задач пользователя в проекте. Данные нужно брать с двух таблиц и сравнивать.
Сейчас вывод выглядит так:
Проект #368;
Иванов Иван
Проектирование, 300 руб.
Проект #368;
Иванов Иван
Изготовление, 700 руб.
Проект #368;
Иванов Иван
Выдача, 500 руб.
Проект #368;
Петров Петр
Проектирование, 300 руб.
Проект #368;
Петров Петр
Изготовление, 700 руб.
Проект #368;
Петров Петр
Выдача, 500 руб.
А должно быть так:
Проект #368;
Иванов Иван
Проектирование, 300 руб.
Изготовление, 700 руб.
Выдача, 500 руб.
Петров Петр
Проектирование, 300 руб.
Изготовление, 700 руб.
Выдача, 500 руб.
Помогите составить правильный запрос к БД.
Сейчас запрос выглядит так:
<?php
$id = $_POST[id];
//Определяем данные проекта и список задач по id, передоваемому по методу POST
$sql = mysqli_query($link, "SELECT * FROM `project_ok_task` WHERE for_project='$id'");
while ($row = mysqli_fetch_assoc($sql)) {
//Определяем полное имя сотрудника из таблицы пользователей по его ID в проекте и выводим его как $row_name[full_name]
$sql_name = mysqli_query($link, "SELECT * FROM usertbl WHERE id='$row[worker]'");
$row_name = mysqli_fetch_assoc($sql_name);
echo "
Проект #$id;<br>
$row_name[full_name]<br>
$row[task], $row[Price] руб.<br>
";
}
?>
Ответы (1 шт):
Лучше избегать мелких запросов в цикле. Воспользуйтесь джойном.
Упорядочиваем запрос по пользователям, если имя старое, то не выводим.
<?php
$id = $_POST[id];
//Определяем данные проекта и список задач по id, передоваемому по методу POST
$sql = mysqli_query($link,
"SELECT t.task, t.Price, u.full_name
FROM project_ok_task t
JOIN usertbl u on (t.worker = u.id)
WHERE t.for_project='$id'
ORDER BY t.worker");
echo "Проект #$id;<br>";
$oldName = '';
while ($row = mysqli_fetch_assoc($sql)) {
if ($oldName != $row['full_name']) {
echo '<br>' . $row['full_name'] . '<br>';
$oldName = $row['full_name'];
}
echo "{$row['task']}, {$row['Price']} руб.<br>";
}
?>