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 :: запрос убийца ))

 PHP.SU

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


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

> Без описания
LIME
Отправлено: 03 Апреля, 2012 - 16:24:24
Post Id


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


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


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




не дается мне этот хитрый запрос
может кто надоумит
попробую изложить все с первого раза))
есть 3 таблицы:

events
event_id | event_name | event_type

seances
id | event_id | seance_date (несколько с аналогичными event_id)

donors
id | donor | akceptor (аналогичных donor не более 6)

donor -> event_name
akceptor -> event_name
seances.event_id -> events.event_id

надо выбрать event_name чтоб seance_date для него не было
таких donor было не более 5
и event_type был такой же как у event_name=$_POST['akceptor']
LIMIT 1

Спасибо.

(Отредактировано автором: 09 Апреля, 2012 - 12:10:36)

 
 Top
EuGen Администратор
Отправлено: 03 Апреля, 2012 - 16:33:37
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Навскидку:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT events.event_name, count(*) AS records_count FROM events LEFT JOIN seances ON events.event_id=seances.event_id LEFT JOIN donors ON events.event_name=donors.donor WHERE seances.seance_date<NOW() AND events.event_type='EVENT_TYPE(from $_POST)' GROUP BY donors.donor ORDER BY seance_date DESC HAVING record_count<=5


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 03 Апреля, 2012 - 16:36:54
Post Id


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


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


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




нет
вы считаете records_count в events
а надо не более 6 таких donor в donors
в итоге будем добавлять результат запроса в donors.donor
а там по логике не возможно более 6ти одинаковых
(Добавление)
сегодня уже не воспринимаю))
меня этот запрос ввел в кому))
если там чуть додумать надо то я завтра попробую
спасибо
(Добавление)
EVENT_TYPE(from $_POST) это типа подзапрос можно сделать как я понимаю
 
 Top
EuGen Администратор
Отправлено: 03 Апреля, 2012 - 16:40:07
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




LIME
Вероятно, я не так понял задачу. До конца еще так и не уверен, что именно нужно, но думаю, дело сведется к группировке по нужному Вам полю.
EVENT_TYPE(from $_POST) - это подставить строку из $_POST


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 03 Апреля, 2012 - 16:43:13
Post Id


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


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


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




в пост можно сказать приходит event_name по которому определяется нужный event_type
но это простым подзапросом
не вызывает трудностей
попробую завтра на свежую голову
спасибо
если будут варианты пишите
 
 Top
LIME
Отправлено: 09 Апреля, 2012 - 11:54:18
Post Id


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


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


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




немного изменились вводные условия
дело сдвинулось
никак только не могу сообразить как 2 подзапроса в 1 свести
CODE (SQL):
скопировать код в буфер обмена
  1. AND event_latin NOT IN (SELECT donor FROM donors GROUP BY donor HAVING COUNT(donor)>5)
  2.        AND event_latin NOT IN (SELECT DISTINCT donor FROM donors WHERE akceptor='lalala')

(Добавление)
вот что в итоге вышло
куча подзапросов но тут вроде иначе никак
или можно?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT event_latin FROM event_table
  2.      WHERE event_id NOT IN (SELECT DISTINCT event_id FROM seances_table)
  3.        AND event_latin NOT IN (SELECT donor FROM donors GROUP BY donor HAVING COUNT(donor)>5)
  4.        AND event_latin NOT IN (SELECT DISTINCT donor FROM donors WHERE akceptor='lalala')
  5.        AND event_type=(SELECT event_type FROM event_table WHERE event_latin='lalala')
  6.        AND short_description<>''
  7.        LIMIT 1;

(Добавление)
lalala приходит в $_POST

(Отредактировано автором: 09 Апреля, 2012 - 12:09:02)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB