Отображается только последняя запись из базы данных - PullRequest
0 голосов
/ 08 мая 2019

Я подключился, я создал быстрый скрипт, в котором я хочу управлять клиентами, доменами и заметками.

Проблема в том, что, когда я добавляю 2 заметки к клиенту с идентификатором: 1 - после просмотра я вижутолько один.

Следующий код показывает, что я сделал до сих пор

Запрос SQL:

$sql = "SELECT * FROM domain JOIN note ON domain.id = note.domain_id GROUP BY domain.id";

Мой код PHP:

while($rs = $resultdb->fetch_array(MYSQLI_ASSOC)) {
    echo '<tr>';
    echo '<td>'.$rs["id"].'</td>';
    echo '<td><strong><a href="'.$rs["domain_name"].'" target="_blank">'.$rs["domain_name"].'</a></strong></td>';
    echo '<td>'.$rs["note"].'</td>';
    echo '</tr>';
    }

В результате он получает:

ID   DOMAIN    NOTE

1    "domain1.com"  "note 1 to domain1.com"

2    "domain2.com"  "note 2 to domain2.com"

Однако в базу данных я добавил несколько заметок для domain1.com.

Я хотел бы видеть все заметки, добавленные в данный домен.

РЕДАКТИРОВАНИЕ:

Когда я делаю: "SELECT * FROM domain JOIN note ON domain.id = note.domain_id";

Я получаю:

Я получаю

Я ожидаю

РЕДАКТИРОВАТЬ: Добавить скриншот

LEFT JOIN

Ответы [ 3 ]

1 голос
/ 08 мая 2019

Ваша GROUP BY ограничивает записи, полученные запросом. Если вы хотите, чтобы все ноты были вместе, вы можете попробовать использовать GROUP_CONCAT(), чтобы создать одно поле со всеми нотами в одном ...

$sql = "SELECT domain.id as id, domain.domain_name as domain_name,
             GROUP_CONCAT(note.note) as note 
           FROM domain 
           LEFT JOIN note ON domain.id = note.domain_id 
           GROUP BY domain.id";

Вы также можете изменить JOIN на LEFT JOIN, если для определенного домена нет заметок.

0 голосов
/ 08 мая 2019

Вероятно, вам нужно использовать отдельный запрос, чтобы получить «Примечания к домену». например:

while ($rs = $resultdb->fetch_array(MYSQLI_ASSOC)) {
    $sql_notes = "SELECT * FROM notes WHERE domain_id = '" . (int)$rs['domain_id'] . "'";

    ...
}
0 голосов
/ 08 мая 2019

вам нужна группа group_concat по note.domain_id

если вам нужно точное совпадение с использованием внутреннего соединения

 "SELECT  id, domain, group_concat(note) as note 
    FROM domain 
    INNER JOIN note ON domain.id = note.domain_id
    GROUP BY note.domain_id";

если вам нужен результат также для идентификатора без примечаний, тогда попробуйте

 "SELECT  id, domain, (group_concat(ifnull(note,'')) as note 
    FROM domain 
    LEFT JOIN note ON domain.id = note.domain_id
    GROUP BY note.domain_id";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...