powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с запросом....
11 сообщений из 11, страница 1 из 1
Помогите разобраться с запросом....
    #32896622
vova1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица _items с товарами

Код: plaintext
1.
2.
item_id  topic_id  res1_id     name          descr            pos    enable  
  1            17       0       диск 1       описание диск       1        1 

есть так же таблица _item_refs соответствия каждому товару какой-то характеристики

Код: plaintext
1.
2.
3.
4.
5.
item_id  ref_id  
    1        14 
    1        19 
    1        21 
    1        30 

ref_id - это идентификатор свойства товара из таблицы _ref
есть еще таблица _ref c этими характеристиками, но она по-моему не нужна для нашего поиска

Как сформировать запрос для поиска товара с какими-либо характеристиками
Например мы знаем что у товара характеристика 14
пишем
SELECT a.item_id, a.res1_id, a.code, a.name
FROM _items a
INNER JOIN _item_refs b on b.item_id=a.item_id
WHERE enable >0 and ref_id=14
все замечательно работает

а как быть, каким должен быть запрос если мы знаем две, три или больше характеристик товара Например мы знаем что у товара характеристики с идентификаторами 14,19 и 21 Это товар 1. Но как все-таки должен выглядеть этот запрос и возможно ли это вообще одним запросом сделать

Спасибо
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32896868
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то сумбурно...
Что за "a" в запросе? Что, собственно, нужно-то получить запросом?
Товары, для которых ref_id и 14, и 19 и 21?
Товары, для которых есть хотя бы один из этих ref?
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32896883
vova1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно получить товары с такими ref_id
Не хотя бы с каким-то из этих, а со всеми....
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32896922
Welly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vova1976Нужно получить товары с такими ref_id
Не хотя бы с каким-то из этих, а со всеми....
А написать ... and ref_id=14 and ref_id=19 и т.д. что мешает?
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32896946
vova1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Welly vova1976Нужно получить товары с такими ref_id
Не хотя бы с каким-то из этих, а со всеми....
А написать ... and ref_id=14 and ref_id=19 и т.д. что мешает?

не мешает ничего, но в ответ пустота :)
вообщем если энды добавлять то не работает, в ответ пустой рекордсет
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32897032
Welly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vova1976
Не хотя бы с каким-то из этих, а со всеми....

Сджойнить надо необходимое число раз:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
  i.* 
from 
  `_items` i
  inner join `_item_refs` ir1 on i.item_id=ir1.item_id
  inner join `_item_refs` ir2 on i.item_id=ir2.item_id
  inner join `_item_refs` ir3 on i.item_id=ir3.item_id 
where
  ir1.ref_id= 14  and
  ir2.ref_id= 19  and
  ir3.ref_id= 21 
;    

или

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select 
  i.* 
from 
  `_items` i
  inner join `_item_refs` ir1 on i.item_id=ir1.item_id and ir1.ref_id= 14 
  inner join `_item_refs` ir2 on i.item_id=ir2.item_id and ir2.ref_id= 19 
  inner join `_item_refs` ir3 on i.item_id=ir3.item_id and ir3.ref_id= 21  
;
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32897051
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М... Трехкратное объединение...
Не в качестве критики, но хотелось бы посмотреть на производительность такого запроса на сколько-нибудь существенной базе)
(а самому её лепить лень %) )
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32897138
Welly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DocAlМ... Трехкратное объединение...
Не в качестве критики,
А попробуйте сделать по-другому? Ессно, это теоретическое решение, которое, впрочем, с некоторыми модификациями приходится применять на практике - например, для поиска объектов по списку их атрибутов, которые хранятся в отдельной таблице и не известны на стадии разработки. Ничего другого не остается.
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32897405
kulpavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если будет несколько товаров, то что должно произойти ?
Код: plaintext
1.
2.
3.
4.
item_id  ref_id      
 1          14      
 2          19      
 3          21      
 4          30  
и вы просите товар, у которого 14,19,21..
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32897641
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно так попробывать

Код: plaintext
1.
2.
3.
4.
5.
6.
select a.title,count(*) as cnt
from aaa_bbb ab
inner join bbb b on ab.b_id in ( 1 , 2 , 3 )  and  ab.b_id=b.id
left join aaa a on a.id=ab.a_id
group by a_id
having cnt =  3 

где cnt = 3 - число идентификаторов для поиска (1,2,3 = 3)

--
No microsoft software was used to post this message
...
Рейтинг: 0 / 0
Помогите разобраться с запросом....
    #32898243
vova1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Welly vova1976
Не хотя бы с каким-то из этих, а со всеми....

Сджойнить надо необходимое число раз:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
  i.* 
from 
  `_items` i
  inner join `_item_refs` ir1 on i.item_id=ir1.item_id
  inner join `_item_refs` ir2 on i.item_id=ir2.item_id
  inner join `_item_refs` ir3 on i.item_id=ir3.item_id 
where
  ir1.ref_id= 14  and
  ir2.ref_id= 19  and
  ir3.ref_id= 21 
;    

или

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select 
  i.* 
from 
  `_items` i
  inner join `_item_refs` ir1 on i.item_id=ir1.item_id and ir1.ref_id= 14 
  inner join `_item_refs` ir2 on i.item_id=ir2.item_id and ir2.ref_id= 19 
  inner join `_item_refs` ir3 on i.item_id=ir3.item_id and ir3.ref_id= 21  
;


thanX... :) работает...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с запросом....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]