Запрос SQLite SELECT в php извлекает только первую строку базы данных и неправильно комбинирует числа - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь построить таблицу HTML из записей базы данных.

Но по какой-то причине таблица не работает, из таблицы берется только первый элемент, называемый Контактами, и все номера для заполнения первой строки таблицы Телефонов.

контакты таблицы

id    firstName lastName
1     sdf       sdf
2     lala      yaya
3     hgj       kj

настольные телефоны

contact_id  number
1           34
2           654
3           345
3           455

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

firstName   lastName    number  number  number
hgj         kj          34      654     345

Я немного боюсь этого запроса

SELECT contacts.firstName, contacts.lastName, group_concat(phones.number) as number 
FROM contacts LEFT JOIN phones WHERE contacts.id = phones.contact_id;

, так как я считаю, что тогда это неправильнои получает только одну строку.

<?php
try
{
//open the database
    $db = new PDO('sqlite:db1.sqlite');

//now output the data to a simple HTML table...
    echo '<table id="kontaktid"><thread>';
    echo '<tr><th>Eesnimi</th><th>Perekonnanimi</th><th>Telefon</th><th>Telefon</th><th>Telefon</th></tr></thread><tbord>';
    $result = $db->query("SELECT contacts.firstName, contacts.lastName, group_concat(phones.number) as number 
FROM contacts LEFT JOIN phones WHERE contacts.id = phones.contact_id;")->fetchAll();
    foreach($result as $row)
    {
        $numbers = explode(',', trim($row['number']));
        list($first, $second, $third) = $numbers;
        echo $row['firstName'];
        echo "<tr><td>".$row['firstName']."</td>";
        echo "<td>".$row['lastName']."</td>";
        echo "<td>".$first."</td>";
        echo "<td>".$second."</td>";
        echo "<td>".$third."</td>";
        echo "</tr>";
    }

    echo "</tbody></table>";
}
catch(PDOException $e)
{
    print 'Exception : ' .$e->getMessage();
}
$db = NULL;

1 Ответ

1 голос
/ 16 апреля 2019

Вы должны использовать group by и group_concat() в результатах:

select 
  c.firstname, c.lastname,
  group_concat(p.number) number
from contacts c inner join phones p
on p.contact_id = c.id
group by c.id, c.firstname, c.lastname

См. Демоверсию .
Результаты:

| firstname | lastname | number  |
| --------- | -------- | ------- |
| sdf       | sdf      | 34      |
| lala      | yaya     | 654     |
| hgj       | kj       | 345,455 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...