Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: связи 2 таблиц
Форумы портала PHP.SU » » Вопросы новичков » связи 2 таблиц

Страниц (1): [1]
 

1. jonston - 13 Апреля, 2017 - 12:26:41 - перейти к сообщению
Добрый день.Есть 2 таблицы day_plan и day_plan_report.Они связаны отношением один ко многим (day_plan.id = day_plan_report.day_plan_id).Как при выборке всех записей day_plan сгенерировать поле has_report которая будет иметь значение 0 или 1 и обозначать имеются ли связанные записи в таблице day_plan_report?
2. Мелкий - 13 Апреля, 2017 - 12:40:07 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT ..., EXISTS(SELECT 1 FROM day_plan_report WHERE day_plan.id = day_plan_report.day_plan_id) AS has_report FROM day_plan;
3. jonston - 13 Апреля, 2017 - 12:44:48 - перейти к сообщению
Мелкий пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT ..., EXISTS(SELECT 1 FROM day_plan_report WHERE day_plan.id = day_plan_report.day_plan_id) AS has_report FROM day_plan;

Благодарю тебя.Какой раз уже выручаешь.Буду пробовать.
4. jonston - 24 Апреля, 2017 - 16:50:09 - перейти к сообщению
Мелкий пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT ..., EXISTS(SELECT 1 FROM day_plan_report WHERE day_plan.id = day_plan_report.day_plan_id) AS has_report FROM day_plan;


Все хорошо работает.Спасибо.Теперь вопрос такого характера.Как повторно использовать has_report?То есть как мне сделать нечто вроде этого?
CODE (SQL):
скопировать код в буфер обмена
  1. (bxon_day_plan.date > NOW() AND has_report = 0) AS expired
5. Мелкий - 24 Апреля, 2017 - 18:30:37 - перейти к сообщению
- никак
- обернуть в ещё один селект

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT has_report, (has_report AND foo()) AS expired FROM (
  2. SELECT EXISTS(...) AS has_report, ... FROM tablename
  3. ) sq;
6. jonston - 24 Апреля, 2017 - 19:00:58 - перейти к сообщению
Мелкий пишет:
- никак
- обернуть в ещё один селект

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT has_report, (has_report AND foo()) AS expired FROM (
  2. SELECT EXISTS(...) AS has_report, ... FROM tablename
  3. ) sq;


Будет быстрее чем дублировать?
7. Мелкий - 24 Апреля, 2017 - 19:09:35 - перейти к сообщению
надо замерять, затрудняюсь с ответом. Смотря что с этим догадается делать планировщик.
8. LIME - 25 Апреля, 2017 - 18:24:12 - перейти к сообщению
Мелкий а надо ли оно?
зачем логику переносить на бд?
для проекта не будет ли лучше сделать 2 запроса?
для читаемости кода и масштабируемости итд итп
предлагаю подумать
(Добавление)
я бы вообще для отчетов сделал отдельную базу
сильно облегчит имхо
9. Мелкий - 25 Апреля, 2017 - 21:28:42 - перейти к сообщению
Если кто не помнит, у меня нет суеверий по части логики в бд. И размещения основной бизнес-логики в хранимках тоже.
Что я неправильный разработчик я уже знаю, обсуждали уже в прошлом.

Разделить OLAP и OLTP - штука полезная. Если проект вообще-то вылез за пределы одной железки. Даже вообще одной железки, а не одной отдельной железки под базу, в чём я не уверен.
10. LIME - 25 Апреля, 2017 - 21:37:00 - перейти к сообщению
Мелкий пишет:
Что я неправильный разработчик я уже знаю, обсуждали уже в прошлом.
вот это новость
но я не о железках
я таксказать о масштабировании в глубину
а по части суеверий разделения логики и данных я придерживаюсь мнения Евгена - субд должна хранить данные и только...остальное значит рыть себе могилу...в пределах разумного конечно...ну и оптимизация еще бывает
ну давай скажи ченить умное)
(Добавление)
хранимки сильно пахнут преждевременной оптимизацией
имеют право быть но трижды три надо подумать и потом всеравно отказаться
11. Мелкий - 25 Апреля, 2017 - 22:35:03 - перейти к сообщению
То что я неправильный разработчик это не новость. Есть огромная куча людей, которые всеми силами прячутся от SQL и обожают всякое js пихать куда надо и не надо. Так что точно неправильный. Новостью будет если я скажу, что я джуниор DBA.

Шутка.
Спойлер (Отобразить)


Субд данные должна хранить, контролировать консистентность записываемых данных и обрабатывать (искать, аггрегировать) эти данные. Внимание на вторую букву в аббревиатуре.

PS: главное не смешивать mysql и хранимки. Используйте или то или другое, но не оба сразу.
12. LIME - 25 Апреля, 2017 - 23:21:29 - перейти к сообщению
ничего умного не сказал хотя я просил
Мелкий пишет:
Есть огромная куча людей, которые всеми силами прячутся от SQL и обожают всякое js пихать куда надо и не надо
эээто что еще за извращенцы? не видал таких
как вообще в одном предложении могут встречаться субд и жс?
мелкий? ты пить чтоли начал? прекращай
(Добавление)
именно блиать управление данными а не логика бизнеса!!!

 

Powered by ExBB FM 1.0 RC1