2015-12-04 3 views
0

У меня есть две таблицы:Выравнивание по левому краю с использованием строки с условием

exp_channel_titles
exp_relationships

Я хочу, чтобы выбрать различные строки из левой таблицы (exp_channel_titles), где они имеют отношение, определенное в exp_relationships. Я могу сделать это с помощью:

SELECT DISTINCT exp_channel_titles.title 
FROM exp_channel_titles 
LEFT JOIN exp_relationships 
ON exp_channel_titles.entry_id=exp_relationships.child_id 
WHERE exp_relationships.child_id IS NOT NULL 
AND exp_channel_titles.channel_id=5 
AND exp_channel_titles.status='open' 

Проблема заключается в том, я хочу, чтобы убедиться, что exp_channel_titles.status = «открытым» для строк, используемых в отношениях. Мне трудно найти голову, поэтому я попытаюсь объяснить лучше.

exp_channel_titles содержит что-то вроде:

entry_id | название | статус | channel_id
1 | няня | открыть | 2
2 | уход за детьми | открыть | 5
3 | няня | открыть | 2
4 | деловое администрирование | открыть | 5
5 | портье | закрытый | 2

exp_relationships определяет отношения между рядами в exp_channel_titles использованием exp_channel_titles.entry_id, как exp_relationships.parent_id и exp_relationships.child_id. Таким образом, указанные строки будут иметь следующие отношения:
parent_id | child_id
1 | 2
3 | 2
5 | 4

Так запрос я обрисовал выше дал бы мне:
уход за детьми
делового администрирования

Но поскольку единственная запись связана с бизнес-администрирования (приемной) имеет статус «закрытого» я ​​не хочу этот элемент появится. Я хочу, чтобы запрос возвращал только уход за детьми.

+0

Что ваш запрос возвращения? На первый взгляд, все выглядит нормально. Хотя, если вам требуются отношения между таблицами, вам не нужно делать LEFT JOIN. Вы можете просто сделать обычный JOIN и избавиться от предложения WHERE child_id IS NOT NULL. –

+0

Он возвращает уход за детьми и управление бизнесом. Если я делаю обычный JOIN и избавляюсь от WHERE child_id IS NOT NULL, он по-прежнему не применяет exp_channel_titles.status = 'open' к строкам, используемым в JOIN. т. е. я все еще вижу деловое администрирование. – user2265915

+0

Можете ли вы изменить свой вопрос, чтобы включить пример того, как выглядит таблица/данные exp_relationship? –

ответ

0

Вы можете присоединиться к столу дважды с псевдонимами, как это:

SELECT DISTINCT 
    ect.title 
FROM 
    exp_channel_titles ect 
JOIN 
    exp_relationships er 
    ON ect.entry_id = er.child_id 
JOIN 
    exp_channel_titles ect2 
    ON ect2.entry_id = er.parent_id 
WHERE 
    ect.channel_id = 5 
    AND ect.status = 'open' 
    AND ect2.status = 'open' 
+0

Спасибо, к сожалению, это все еще показывает записи, в которых соответствующая запись имеет статус закрытого, т. Е. «Бизнес-администрирование» все равно будет отображаться в приведенном выше наборе данных. Посмотрите на подзапросы, хотя, возможно, вы догадались, что мое понимание SQL не удивительно. – user2265915

+0

Извините, я снял строку, когда копировал из окна sql. Я отредактировал вышеупомянутый запрос. Может, это сработает? –

+0

Это работает очарование, спасибо! – user2265915