Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2014, 18:45   #1
smala
Новичок
Джуниор
 
Регистрация: 11.11.2014
Сообщений: 3
По умолчанию Помогите с запросом

Добрый время суток)) в общем встала задача создать такой дурной запрос

Код:
SELECT  `vizits` . * 
	FROM (
		`vizits`
	)
	LEFT JOIN  `projects` ON  `projects`.`id` =  `vizits`.`project_id` 
	LEFT JOIN  `otvets` ON  `otvets`.`vizit_id` =  `vizits`.`id` 
		WHERE  `projects`.`name` 
			IN 
		( 'КРЕДІ АГРІКОЛЬ' ) 
			AND 
(
		 `vizits`.`project_id` =324
			AND 
			(
				(`otvets`.`tag_key` =  '543dc43df3cf5aea67cf59650142ae36'	AND  `otvets`.`val` IN ('Полтавська'))
					AND
				(`otvets`.`tag_key` =  '345805b88b9ca1e189fa11ea817e5666' AND  `otvets`.`val` IN ('ФО'))
			)
)
AND  `vizits`.`status` =9
AND  `vizits`.`type` =0
GROUP BY  `vizits`.`id` 
ORDER BY  `vizits`.`date_vizit` DESC 
LIMIT 30
все бы хорошо но из за
`otvets`.`tag_key` = '543dc43df3cf5aea67cf59650142ae36' и
`otvets`.`tag_key` = '345805b88b9ca1e189fa11ea817e5666'
не срабатывает, потомучто хочу выбрать и одно и другой значение одновременно, а у меня к одной записи в таблице vizits много привязано записей из otvets. нужно выбрать именно такое условие. вот результат сделанные подругому немного, искал на форумах смотрел

Код:
SELECT `vizits`.* FROM (`vizits`) 

LEFT JOIN `projects` ON `projects`.`id`=`vizits`.`project_id` 
LEFT JOIN `otvets` ON `otvets`.`vizit_id`=`vizits`.`id` AND `otvets`.`last`=1


WHERE `projects`.`name` IN ('КРЕДІ АГРІКОЛЬ') 

AND 

	(
		`vizits`.`project_id` = 324 
         		AND  
   			(`otvets`.`tag_key`, `otvets`.`val`) 
          		IN 
		   		( 
			       ('543dc43df3cf5aea67cf59650142ae36', 'Полтавська'),
			       ('543dc43df3cf5aea67cf59650142ae36', 'Дніпропетровська'),
			       ('345805b88b9ca1e189fa11ea817e5666','ФО')
		    	)

   )
   

AND `vizits`.`status` = 9 AND `vizits`.`type` = 0 GROUP BY `vizits`.`id` HAVING COUNT(DISTINCT `otvets`.`tag_key`)=2 ORDER BY `vizits`.`date_vizit` desc LIMIT 30
тут работает все правильно но количество ключей может менятся от него и меняется цифра HAVING COUNT(DISTINCT `otvets`.`tag_key`)=2 (2 именно уникальных значения), ну и тут можно вырулить и вписывать количество, но как быть с таким вариантом, я вообще не знаю

Код:
SELECT `vizits`.* FROM (`vizits`) 

LEFT JOIN `projects` ON `projects`.`id`=`vizits`.`project_id` 
LEFT JOIN `otvets` ON `otvets`.`vizit_id`=`vizits`.`id` AND `otvets`.`last`=1


WHERE `projects`.`name` IN ('КРЕДІ АГРІКОЛЬ') 

AND 




(

	(
		`vizits`.`project_id` = 324 
         		AND  
   			(`otvets`.`tag_key`, `otvets`.`val`) 
          		IN 
		   		( 
			       ('543dc43df3cf5aea67cf59650142ae36', 'Полтавська'),
			       ('543dc43df3cf5aea67cf59650142ae36', 'Дніпропетровська'),
			       ('345805b88b9ca1e189fa11ea817e5666','ФО')
		    	)

   )
    OR 
	(`vizits`.`project_id` = 258 
         AND  
   (`otvets`.`tag_key`, `otvets`.`val`) 
          IN 
   ( 
       ('5f04973bace196f3c0a519f33a1a3dba', 'ЦРУ'),
       ('5f04973bace196f3c0a519f33a1a3dba', 'ЮРУ')
    )
   )
   
 )

AND `vizits`.`status` = 9 AND `vizits`.`type` = 0 GROUP BY `vizits`.`id` HAVING COUNT(DISTINCT `otvets`.`tag_key`)=3 ORDER BY `vizits`.`date_vizit` desc LIMIT 30
какой тут писать HAVING COUNT(DISTINCT `otvets`.`tag_key`)= сумму пробовал, тоесть в этом запросе сумма уникальых 3, не сработало.
может бы подошло что то вроде having внутрь вложить и передавать туда количество уникальных именно к этому условию. вообще не понятно((( подскажите пожалуйста как решить проблемму, для нагладного понимания накидал мини план как у меня устроенна структура.
-----------------------------------------------------------
table1
id name
1 'bla bla bla'
2 'bla2 bla2 bla2'

table2
id, on_id, tag_key, val
1 1 '543dc43df3cf5aea67cf59650142ae36' 'Полтавська'
2 1 '345805b88b9ca1e189fa11ea817e5666' 'ФО'
3 2 '543dc43df3cf5aea67cf59650142ae36' 'Полтавська'
4 2 '345805b88b9ca1e189fa11ea817e5666' 'ФА'

в ответе нужно получить table1 1 'bla bla bla'
------------------------------------------------------------

в ОБЩЕМ ПОМОГИТЕ
smala вне форума Ответить с цитированием
Старый 11.11.2014, 19:03   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и одно и другой значение одновременно
Так не получится как ни старайся. Это из серии "Стой там - иди сюда".
Тебе OR нужен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2014, 19:17   #3
smala
Новичок
Джуниор
 
Регистрация: 11.11.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так не получится как ни старайся. Это из серии "Стой там - иди сюда".
Тебе OR нужен.
с or все работает, но мне нужны только пересечения и того и того, а or выводит любое совпадение, может через having както?, я с ним не работал не понимаю как им отбирать (
smala вне форума Ответить с цитированием
Старый 11.11.2014, 19:18   #4
smala
Новичок
Джуниор
 
Регистрация: 11.11.2014
Сообщений: 3
По умолчанию

Код:
(`otvets`.`tag_key` =  '543dc43df3cf5aea67cf59650142ae36'	AND  `otvets`.`val` IN ('Полтавська'))
					AND
				(`otvets`.`tag_key` =  '345805b88b9ca1e189fa11ea817e5666' AND  `otvets`.`val` IN ('ФО'))
вот тут по сути вся загвоздка
smala вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с GET запросом Mik92 Общие вопросы C/C++ 4 29.09.2014 22:58
Помогите с запросом der90 SQL, базы данных 2 13.02.2014 10:50
Помогите с запросом euronymous SQL, базы данных 12 18.03.2012 05:24
Помогите с запросом NATAHA Microsoft Office Access 2 08.05.2009 15:17
Помогите с запросом Blackmore БД в Delphi 3 07.05.2008 01:18