длинный запрос - ошибка

wanderer

PHP - rulez!...
[sql]
SELECT DISTINCT site_users_plans.plan_id FROM site_users_plans INNER JOIN site_users_plans_features ON site_users_plans.plan_id=site_users_plans_features.plan_id WHERE plan_type=1 AND (1=1 OR (feature_name='plan_os' AND feature_value='FreeBSD') OR (feature_name='plan_server_software' AND feature_value='Apache'))
[/sql]
http://www.interstranichka.hop.ru/tmp/db.png (извините, если что не правильно нарисовал - первый раз этим пользовался)

"выдал" планы:
Array
(
[plan_id] => 7d7b7790e7dff2a7fb1bc191a8c7582a
)
Array
(
[plan_id] => b7dc6f82cdc7490d389b6360293d18a2
)

хотя дожен был только первый план, т.к. во втором plan_server_software - Apache2
 

tony2001

TeaM PHPClub
тебе не это ли надо?
[sql]
SELECT DISTINCT
site_users_plans.plan_id
FROM
site_users_plans JOIN
site_users_plans_features ON
site_users_plans.plan_id=site_users_plans_features.plan_id
WHERE
plan_type=1 AND (1=1 OR (feature_name='plan_os' AND feature_value='FreeBSD' AND feature_name='plan_server_software' AND feature_value='Apache'))
[/sql]
?
 

tony2001

TeaM PHPClub
стоп.
оно тебе выбрало все записи с plan_type = 1
т.к. у тебя там 1=1 стоит.
а ты как хотел?
 

wanderer

PHP - rulez!...
[sql]
SELECT DISTINCT site_users_plans.plan_id FROM site_users_plans INNER JOIN site_users_plans_features ON site_users_plans.plan_id=site_users_plans_features.plan_id WHERE plan_type=1 AND ((feature_name='plan_os' AND feature_value='FreeBSD') OR (feature_name='plan_server_software' AND feature_value='Apache'))
[/sql]
тоже самое:
Array
(
[plan_id] => 7d7b7790e7dff2a7fb1bc191a8c7582a
)
Array
(
[plan_id] => b7dc6f82cdc7490d389b6360293d18a2
)
а если вместо OR использовать AND - то тогда вообще ничего не выдаёт
 

tony2001

TeaM PHPClub
словами скажи что тебе нужно:
выбрать ИД записей, у который это равно этому, а это - этому или тому.
 

tony2001

TeaM PHPClub
[sql]
SELECT DISTINCT site_users_plans.plan_id
FROM
site_users_plans as sup,
site_users_plans_features as supf1,
site_users_plans_features as supf2
WHERE
sup.plan_id = supf1.plan_id
AND
sup.plan_id = supf2.plan_id
AND
plan_type = 1
AND (supf1.feature_name = 'plan_os' AND supf1.feature_value = 'FreeBSD')
AND (supf2.feature_name = 'plan_server_software' AND supf2.feature_value = 'Apache')
[/sql]
 

wanderer

PHP - rulez!...
всё. вопрос закрыт. помогло только несколько раз джойнить, как и предложил tony.
 
Сверху