Хорошо, мы идем ... У меня есть запрос на выборку для доступа к очень абстрактной базе данных.Мой текущий запрос просматривает 5 таблиц (используя 6 «И», чтобы сделать это ... не весело) и возвращает все записи, соответствующие всем критериям, как и должно быть.
Мой вопрос такой: Могу ли я добавитьчто-то в моем текущем запросе, которое в основном говорит: «Если запись соответствует всем этим, , но НЕ соответствует всем этим ».
Пример:
Мой текущий запрос:
$query = "SELECT s.state_name FROM `tbl_records` r, `tbl_states` s,
`tbl_events` e, `tbl_fields` f, `tbl_field_values` v
WHERE s.state_id = r.state_id AND f.field_id = '$field_id' AND
v.field_id = f.field_id AND v.event_id = e.event_id AND e.record_id = r.record_id
AND v.value_id = '$field_value' AND v.is_latest = '1'";
Уродливо и долго, верно?Это дает мне все записи, которые соответствуют одному критерию (запись соответствует $ field_id и $ field_value).
Теперь мне нужно взять все записи, найденные этим запросом, но вычесть любую записьэто соответствует другому критерию, что-то вроде "AND (v.event_id = e.event_id AND f.field_id = '155' AND v.value_id != '1');
Это длинная и уродливая версия. Подводя итог:
Мне нужно создать запрос, который выглядит примерно так:
Select "s.state_name FROM a,b,c,d WHERE (a.1 = b.2 AND c.3 = d.4 *etc*) AND ONLY IF (a.2 = b.3 AND c.4 != d.5)"
Возможно ли это? Можете ли вы создать запрос, который говорит: «Если все это соответствует и НЕ соответствует всему этому»?
Дайте мне знать, если кому-то нужно больше разъяснений ..Что меня не удивит. Спасибо всем.
ОБНОВЛЕНИЕ :: Добавление изображения, чтобы попытаться уточнить, что мне нужно.
структура таблицы http://www.everythingsirie.com/values.jpg
Два значения в разделе «нужно добавить» должны относиться к одной и той же записи. Так что в плане «Для этой же записи, в таблице« tbl_field_values », если запись имеет« field_id »из'155' И поле_значения '1', не включайте его. "
Но обратите внимание, что теперь есть два field_id и value_id.Это то, что меня озадачило ...
ОБНОВЛЕНИЕ 2 ::
Я обновил запрос, используя ответы от @ M42 и @Michael.Однако я все равно получаю одинаковое количество возвратов с или без «И НЕ» ...
$query = "SELECT s.state_name FROM `tbl_records` r
INNER JOIN `tbl_states` s ON s.state_id = r.state_id
INNER JOIN `tbl_events` e ON e.record_id = r.record_id
INNER JOIN `tbl_field_values` v ON v.event_id = e.event_id
INNER JOIN `tbl_fields` f ON v.field_id = f.field_id
WHERE f.field_id = '$field_id'
AND v.value_id = '$field_value'
AND v.is_latest = '1'
AND NOT (v.field_id = '155' AND v.value_id = '1')";
Я думаю, проблема в том, что field_id и value_id мне нужно НЕ совпадения находятся в той же таблице, что и field_id и value_id, которые я DO должен сопоставить.Вот картинка, показывающая field_id 155 с обоими значениями value_id 1 и 0.
Мне НЕ нужно включать записи, имеющие значение value_id 1, ТОЛЬКО когда field_id равно 155 ... Но в то же времяраз я AM пытаюсь выбрать записи с field_id = 12 и value_id = 1 ...
структура таблицы http://www.everythingsirie.com/valueid.jpg
Я знаю, что это беспорядок... Извините.