[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как лучше сделать реализацию
Страницы: 1, 2, 3, 4
ЛьiжHиk
Ещё раз, в цикле собираешь только сам запрос. Вообще тут ещё одна таблица нужна для отношения сертификатов к гостам.

$stmt = $pdo->query('SELECT * FROM certificate');
$go = '';
foreach ($stmt as $row) {

$go .= "`id` = ' ".$row['gost']." '"; // про AND не забудь ))

}
if(!empty($go)) {
$stmt = $pdo->query('SELECT * FROM `gost` WHERE $go');
}
Valick
Astin, я тебе ещё раз говорю, нормализацию таблиц придумали не зря. А нарушение первого закона коим является твоя ГОСТ 1, ГОСТ 2, ГОСТ 3 вообще делает невозможным обработку данных на уровне СУРБД.
При нормализованном хранении данных в БД вся твоя хотелка решается одним запросом, в этом и есть смысл базы данных.

_____________
Стимулятор ~yoomoney - 41001303250491
Astin
Предположим таблицы

ГОСТЫ gost

id | name
1 ГОСТ Р 54149-2010
2 ГОСТ 13109-97
3 ГОСТ 13109-97

Сертификаты certificate

id 1
name Сертификат 1
opisanie Описание
gost 1, 2, 3

При создании сертификата я выбираю к нему госты, то есть какие к нему относятся госты
Вот создали сертификат с гостами

id 1
name Сертификат 1
opisanie Описание
gost 1, 2, 3

Далее делаем запрос на вывод сертификатов и к нему гостов с названиями

$stmt = $pdo->query('SELECT * FROM certificate');

foreach ($stmt as $row) {

echo 'Название сертификата - '.$row['name'];

//теперь госты к нему выводим
$pieces = explode(",", $row['gost']);

foreach ($pieces as $key) {

$stmt = $pdo->prepare('SELECT * FROM gost WHERE id = :ID');
$stmt->execute(array(':ID' => $key));

$query = $stmt->fetch();

echo 'Госты - '.$query['name'];
}

}

В итоге выходит какаято хрень а не запрос
Valick
Astin, ты вообще читаешь, что я тебе пишу? smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
ЛьiжHиk
В цикле запросы НИКОГДА не делаются, только собираются.

Valick дело говорит
Astin
Valick а как ты мне предлагаешь хранить пачку гостов к одному сертификату?

Можно еще таблицу, но проблема в том что один и тот же гост может быть у разных сертификатов
Astin
Цитата (Valick @ 24.09.2019 - 18:45)
Astin, ты вообще читаешь, что я тебе пишу? smile.gif

Я не успеваю читать )) пока напишу уже куча ответов
Valick
Цитата (Astin @ 24.09.2019 - 17:46)
Valick а как ты мне предлагаешь хранить пачку гостов к одному сертификату?

это отношение один ко многим (две таблицы)
Цитата (Astin @ 24.09.2019 - 17:46)
но проблема в том что один и тот же гост может быть у разных сертификатов

а это уже отношение многие ко многим (три таблицы, о чём и говорил Лыжник)


_____________
Стимулятор ~yoomoney - 41001303250491
ЛьiжHиk
Кто мешает в 3 таблице сделать новую запись?

Составная:
id | id Сертификата (int) | id Госта (int)
1 | 1 | 3
2 | 1 | 4
3 | 2 | 1
4 | 1 | 1
5 | 2 | 4
6 | 2 | 20
Astin
Да скорее всего третья и потребуется, а как теперь лучше сделать запрос?
Первый запрос понимаю так что собираю его в цикле
Как лучше сделать второй?
ЛьiжHиk
Тут ненадо собирать запрос, это написал для общего развития, чтобы сами запросы в цикле не делали )) Почитайте про JOIN

Astin
Вот я и думаю как его лучше собрать с JOIN
И никак не допрет до меня как лучше сделать
Astin
К примеру составная
Составная compound

id_s | id_certificate | id_gost

Вытаскиваю данные без JOIN

$stmt = $pdo->query('SELECT * FROM certificate');
$go = '';
foreach ($stmt as $row) {

echo 'Название сертификата - '.$row['name'];

$go .= $row['id'];
}

$stmt = $pdo->query('SELECT * FROM compound WHERE id_certificate = '.$go);
$wo = '';
foreach ($stmt as $row) {

$wo .= $row['id_gost'];
}

$stmt = $pdo->query('SELECT * FROM gost WHERE id = '.$wo);

foreach ($stmt as $row) {

echo 'ГОСТ - '.$row['name'];
}

Как с JOIN сделать не соображу
ЛьiжHиk
Готового решения не будет ) Пример: выборка таблиц многие ко многим
Astin
Что то типа

$stmt = $pdo->query('SELECT certificate.*, gost.*
FROM (certificate JOIN compound ON certificate.id = compound.id_certificate)
JOIN gost ON compound.id_gost = gost.id'
);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.