[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из 3х и более таблиц, часть 2
Игорь_Vasinsky
вообщем делаю фильтр для магазина

есть таблица со свойствами товара

pid | name

есть таблица с дополнительными атрибутами

a_pid | attr_id | text

связь обоих по pid = a_pid


есть 2 attr_id - 12 и 14

есть в GET $attr_text и $attr_color

нужно составить запрос - чтобы

WHERE (attr_id = 12 AND text = $attr_text)
AND
WHERE (attr_id = 14 AND text = $attr_color)

достаточно только составить условие по второй таблице



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
up

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
очень up

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
xlebosol
SELECT * FROM t1, t2 WHERE attr_id IN(12, 14) AND text IN(attr_text, $attr_color) JOIN ON (t1.a_pid=t2.pid)
Игорь_Vasinsky
меня вот это кусок интересовал

Цитата
text IN(attr_text, $attr_color) JOIN ON (t1.a_pid=t2.pid)


у меня там большой сложный запрос к которому нуно дописать это условие.

в конце основного запроса уже используется ON, поэтому я дописал через AND

AND pa.attribute_id IN(12, 16) AND pa.`text` IN('".urldecode(mysql_real_escape_string($_GET['attr_text']))."', 
'".urldecode(mysql_real_escape_string($_GET['color']))."') ";


но условие не сработало.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
up again

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
alexbel2404
SELECT * FROM tbl1 JOIN tbl2 ON tbl1.a_pid = tbl2.pid WHERE tbl2.attr_id IN(12, 14) AND tbl2.text IN(attr_text, attr_color)

Если я правильно понял задачу)
Игорь_Vasinsky
Цитата
SELECT * FROM tbl1 JOIN tbl2 ON tbl1.a_pid = tbl2.pid WHERE tbl2.attr_id IN(12, 14) AND tbl2.text IN(attr_text, attr_color)


этот кусок не срабатывает

Цитата
WHERE tbl2.attr_id IN(12, 14)


это будет true для каждого товара, т.к. у каждого товара есть эти 2 атрибута



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Alchemist
Игорь, у меня такое чувство, что вы вообще плохо понимаете что делаете....

1) комбинация urldecode(mysql_real_escape_string()) не имеет никакого смысла вообще.

2) проблема с запросом решается либо добавлением в JOIN таблицы аттрибутов для каждого аттрибута из WHERE, либо если фильтрация идет всегда по совокупности условий, то можно просто выбирать подходящие аттрибуты и группировать их по ID продукта, в конце оставляя только те, которые выполняют все условия.
Игорь_Vasinsky
Цитата
urldecode(mysql_real_escape_string())


это 2 совершенно разные функции laugh.gif

вопрос уже решён.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.