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 :: Версия для печати :: Выборка значений
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Выборка значений

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

1. Sig - 06 Марта, 2013 - 21:53:34 - перейти к сообщению
Подскажите как можно объединить что б быстро выполнялось
сейчас работает отдельно каждый
join у меня что-то не получилось нормально сделать
это фильтр товара

1 таблица
делаем запрос по нескольким характеристикам (name) получаем id их (optionid)
База примерно 300 строк

CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT optionid FROM таблица_1 WHERE option_value IN ($name))

optionid----name
11----------mp3
12----------фай-фай
18----------радио

2 таблица
у товара должен быть в характеристиках mp3 и фай-фай (оба)
(optionid) 11 и 12 ест у (dopid) 1 и 29
База примерно 10000 строк

CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT optionid FROM таблица_2 WHERE variantID IN (ответ таблица_1) GROUP BY productID HAVING count(0)=количеству характеристик)

optionid---dopid
11----------1
11----------18
11----------29
12----------29
12----------1
12----------18


3 таблица
выводим dopid какие удовлетворяют 2 таблицы
База примерно 1000 строк

CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT * FROM 3_таблица WHERE dopid IN (ответ таблица_3))

dopid--lastname----adreee----tel
11------иванов------москва----99
11------сидоро------киев-------8 8
11------петров------харьков---11
18------васичькин---питер-----12
2. ПТО - 07 Марта, 2013 - 13:52:23 - перейти к сообщению
Приведи названия строк из таблиц, и что должно получиться. Ты походу пользуешься стандартным языком SQL.
3. Sig - 08 Марта, 2013 - 01:07:06 - перейти к сообщению
ПТО пишет:
Приведи названия строк из таблиц, и что должно получиться. Ты походу пользуешься стандартным языком SQL.


да я стандартным языком пока, учу дальше

вводим для поиска mp3 и фай-фай
берём из 1-й таблицы (mp3 и фай-фай) и получаем (11 и 12) - optionid
2- таблиц где употребляются optionid (11 и 12) и получаем dopid - только должно быть и 11 и 12 и каждого элемента
3- таблица dopid где есть такие выводим инфу (в ней детально описание товара)
4. ПТО - 09 Марта, 2013 - 15:33:22 - перейти к сообщению
SELECT *
FROM 1_таблица LEFT JOIN 2_таблица USING (optionid) LEFT JOIN 3_таблица USING(dopid)
WHERE name='mp3' OR name='фай-фай';
--WHERE name IN('mp3', 'фай-фай');
--WHERE name = ANY(ARRAY['mp3', 'фай-фай']);
(Добавление)
Учи стандартный - будет порядок в голове. Всякие примочки и усовершенствования потом выучишь, со временем Хорошо
5. Sig - 10 Марта, 2013 - 14:37:14 - перейти к сообщению
Спасибо большое получилось, и немного разобрался
получилось


select * FROM таблица_1 LEFT JOIN таблица_2 USING (optionid) LEFT JOIN таблица_2 USING(dopid) WHERE name IN('mp3', 'фай-фай') GROUP BY name HAVING count(0)=2


хотел ещё спросить
если нужно подсчитать count (в этом запросе) как сделать ?, сейчас выдаёт всегда 2, количества "HAVING count(0)=2"

 

Powered by ExBB FM 1.0 RC1