Я пытаюсь максимально упростить свой вопрос, надеюсь, мое объяснение прояснит, что это значит.
Сценарий таков:
У меня есть две таблицы, а именно: tbl_instructors, в которой есть информация об инструкторах, такая как идентификатор и имя инструктора, и tbl_advisory, в которой есть все записи класса, который обрабатывается конкретным инструктором, например Course, Year и Section класса. Итак, моя таблица выглядит примерно так:
таблица_инструктор:
id | name
----+--------------
001 | Jhon Doe
002 | Kaitlyn Moore
tbl_advisory:
instructor_id | course | year | section
---------------+---------------+-----------+-----------
001 | BSINT | 2nd Year | A
001 | BSINT | 2nd Year | C
001 | BSINT | 2nd Year | B
002 | BSBA | 1st Year | A
002 | BSBA | 1st Year | D
Теперь я пытаюсь выбрать идентификатор и имя инструктора и связанную с ним консультативную информацию, используя INNER JOIN в моем PHP-запросе:
<?php
$getAdvisory = "SELECT
ti.id AS id,
ti.name AS name,
ta.course AS ccourse,
ta.year AS cyear,
ta.section AS csection
FROM tbl_instructor as ti
INNER JOIN tbl_advisory as ta
ON ti.id = ta.instructor_id";
OpenConn()->query($getAdvisory);
if ($getAdvisory->num_rows > 0) {
while ($row = $getAdvisory->fetch_assoc()) {
$id = $row['id'];
$name = $row['name'];
}
?>
<td><?php echo $id; ?></td>
<td><?php echo $name; ?></td>
<td><button>View Advisory</button></td>
<?php
}
}
?>
Что дает мне набор результатов в моей таблице html/php:
id | name | action
-----+---------------+-----------
001 | John Doe | View Advisory
001 | John Doe | View Advisory
001 | John Doe | View Advisory
002 | Kaitlyn Moore | View Advisory
002 | Kaitlyn Moore | View Advisory
Моя проблема в том, что я хочу, чтобы моя html-таблица была DISTINCT по идентификатору инструктора, но по-прежнему возвращала всю связанную консультативную информацию каждого инструктора, потому что я хочу отображать, какой класс инструктор проводит в модальном режиме, когда я нажимаю кнопку View Advisory рядом с каждым инструктором. Имя Чтобы я мог обновить свою таблицу, если инструктор удалил или добавил новый совет.
Как я могу достичь этого? Заранее спасибо.
Это родительская страница, используйте группу там. при щелчке по просмотру рекомендации передайте идентификатор инструктора, чтобы получить соответствующие рекомендации из таблицы tbl_advisory.
@MasivuyeCokile Да, я сделал. Но он возвращает только 1 строку для справочной информации.
см. комментарий @RahulMeshram выше ^
Можете ли вы построить тестовую схему здесь ссылка на сайт?
@RahulMeshram, когда я нажимаю кнопку «Просмотреть рекомендации», появляется модальное окно и отображается информационная информация. . Что ты хочешь этим сказать ?
При извлечении данных для модели вам не нужно применять группировку. Вы извлекаете данные с помощью идентификатора инструктора, который вы передаете при нажатии кнопки просмотра.
@RahulMeshram, можете ли вы опубликовать свой ответ ниже, сэр?
Проверьте мой ответ. Дайте мне знать, если что-то не ясно
Кажется, вы хотите преобразовать двумерный массив в многомерный.
Почему вы не печатаете информацию из tbl_advisory? Какой смысл выбирать эти столбцы, если вы их не используете?
@Barmar, пожалуйста, внимательно прочитайте мой вопрос. .
Выполните группировку по инструктору в коде PHP вместо SQL. Когда вы получаете результаты, создайте ассоциативный массив с ключом по идентификатору инструктора, а значением будет массив данных из tbl_advisory.






Вам нужно предложение DISTINCT
SELECT DISTINCT
ti.id AS id,
ti.name AS name,
ta.course AS ccourse,
ta.year AS cyear,
ta.section AS csection
FROM tbl_instructor as ti
INNER JOIN tbl_advisory as ta ON ti.id = ta.instructor_id
Таким образом вы должны получить
id | name | action
-----+---------------+-----------
001 | John Doe | View Advisory
002 | Kaitlyn Moore | View Advisory
Если значение находится в разных строках, вы можете использовать (поддельную) функцию агрегации.
SELECT ti.id AS id,
ti.name AS name,
min(ta.course) AS ccourse,
min(ta.year) AS cyear,
min(ta.section) AS csection
FROM tbl_instructor as ti
INNER JOIN tbl_advisory as ta ON ti.id = ta.instructor_id
GROUP BY id, name
Это не приведет к такому результату, поскольку course, year и section будут разными в каждой строке.
Как я спросил в комментарии к основному вопросу, какой смысл выбирать что-либо из tbl_advisory в этом запросе, если оно не отображается?
Пожалуйста, проверьте этот запрос:
SELECT ti.*, GROUP_CONCAT( CONCAT( ta.course, ' ' , ta.year,' ', ta.section ) separator ' - ') as ColumnName
FROM tbl_instructor as ti
INNER JOIN tbl_advisory as ta ON ti.id = ta.instructor_id
GROUP BY ti.idid
Вывод:
| name | action
-----+---------------+-----------
001 | John Doe | BSINT 2nd Year a - BSINT 2nd Year b - BSINT 2nd Year c
002 | Kaitlyn Moore | BSBA 1st Year d - BSBA 1st Year a
Спасибо за это, но я хочу назначить курс, год и раздел в переменную PHP, чтобы я мог обновлять базу данных, когда инструктор добавляет или удаляет рекомендательный файл . Возможно ли это с этим запросом?
Вы можете использовать explode(',', $row['ColumnName']), чтобы преобразовать столбец в массив всех рекомендаций.
пытался
Group By?