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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: связи 2 таблиц

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
jonston
Отправлено: 13 Апреля, 2017 - 12:26:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Добрый день.Есть 2 таблицы day_plan и day_plan_report.Они связаны отношением один ко многим (day_plan.id = day_plan_report.day_plan_id).Как при выборке всех записей day_plan сгенерировать поле has_report которая будет иметь значение 0 или 1 и обозначать имеются ли связанные записи в таблице day_plan_report?


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
Мелкий Супермодератор
Отправлено: 13 Апреля, 2017 - 12:40:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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;


-----
PostgreSQL DBA
 
 Top
jonston
Отправлено: 13 Апреля, 2017 - 12:44:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Мелкий пишет:
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;

Благодарю тебя.Какой раз уже выручаешь.Буду пробовать.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
jonston
Отправлено: 24 Апреля, 2017 - 16:50:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Мелкий пишет:
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


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
Мелкий Супермодератор
Отправлено: 24 Апреля, 2017 - 18:30:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




- никак
- обернуть в ещё один селект

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


-----
PostgreSQL DBA
 
 Top
jonston
Отправлено: 24 Апреля, 2017 - 19:00:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




Мелкий пишет:
- никак
- обернуть в ещё один селект

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


Будет быстрее чем дублировать?


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
Мелкий Супермодератор
Отправлено: 24 Апреля, 2017 - 19:09:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 25 Апреля, 2017 - 18:24:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Мелкий а надо ли оно?
зачем логику переносить на бд?
для проекта не будет ли лучше сделать 2 запроса?
для читаемости кода и масштабируемости итд итп
предлагаю подумать
(Добавление)
я бы вообще для отчетов сделал отдельную базу
сильно облегчит имхо
 
 Top
Мелкий Супермодератор
Отправлено: 25 Апреля, 2017 - 21:28:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Если кто не помнит, у меня нет суеверий по части логики в бд. И размещения основной бизнес-логики в хранимках тоже.
Что я неправильный разработчик я уже знаю, обсуждали уже в прошлом.

Разделить OLAP и OLTP - штука полезная. Если проект вообще-то вылез за пределы одной железки. Даже вообще одной железки, а не одной отдельной железки под базу, в чём я не уверен.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 25 Апреля, 2017 - 21:37:00
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Мелкий пишет:
Что я неправильный разработчик я уже знаю, обсуждали уже в прошлом.
вот это новость
но я не о железках
я таксказать о масштабировании в глубину
а по части суеверий разделения логики и данных я придерживаюсь мнения Евгена - субд должна хранить данные и только...остальное значит рыть себе могилу...в пределах разумного конечно...ну и оптимизация еще бывает
ну давай скажи ченить умное)
(Добавление)
хранимки сильно пахнут преждевременной оптимизацией
имеют право быть но трижды три надо подумать и потом всеравно отказаться
 
 Top
Мелкий Супермодератор
Отправлено: 25 Апреля, 2017 - 22:35:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




То что я неправильный разработчик это не новость. Есть огромная куча людей, которые всеми силами прячутся от SQL и обожают всякое js пихать куда надо и не надо. Так что точно неправильный. Новостью будет если я скажу, что я джуниор DBA.

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


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

PS: главное не смешивать mysql и хранимки. Используйте или то или другое, но не оба сразу.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 25 Апреля, 2017 - 23:21:29
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ничего умного не сказал хотя я просил
Мелкий пишет:
Есть огромная куча людей, которые всеми силами прячутся от SQL и обожают всякое js пихать куда надо и не надо
эээто что еще за извращенцы? не видал таких
как вообще в одном предложении могут встречаться субд и жс?
мелкий? ты пить чтоли начал? прекращай
(Добавление)
именно блиать управление данными а не логика бизнеса!!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB