Выполнение запроса 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>";
}
?>
→ Ссылка