Как мне вписать эти запросы в один? - PullRequest
1 голос
/ 27 июля 2011

Хорошо, я собираюсь попробовать это снова ... на этот раз я определенно понял это правильно. Извините за путаницу. (

table1

+----+---------+------------+------+
| id | item_id | product_id | type |
+----+---------+------------+------+

table2, table3, table4 :

+----+---------+
| id | item_id |
+----+---------+

Вот мой основной запрос :

$sql = "SELECT t1.* FROM table1 AS t1, table2 AS t2 WHERE t2.id = '1' AND 
t2.item_id = t1.item_id AND t1.type NOT IN ('type1', 'type2') LIMIT 5";

$a = mysql_query($sql);
while($b = mysql_fetch_assoc($a))

А теперь я хочу объединить эти 2 запроса :

1-й запрос :

И ЕСЛИ t1.type = 'type3' ТО

SELECT t3.item_id FROM table3 AS t3 WHERE t3.id = t1.product_id AND
t3.item_id NOT IN (SELECT t2.item_id FROM table2 AS t2 WHERE t2.id = '1')

ТОЛЬКО если этот оператор t3.item_id NOT IN (...) в вышеприведенном запросе верен, то должен отображаться t1.id из основного запроса . Однако, если t3.item_id is IN (...), то его следует исключить из результатов.

2-й запрос :

И ЕСЛИ t1.type = 'type4' ТО

SELECT t4.item_id FROM table4 AS t4 WHERE t4.id = t1.product_id AND
t4.item_id NOT IN (SELECT t2.item_id FROM table2 AS t2 WHERE t2.id = '1')

То же, что и 1-й запрос .

Это все вписывается в один запрос? Мне это нужно только в одном запросе, поэтому я знаю, какие результаты будут отображаться на следующей странице, например, LIMIT 5,5

Ответы [ 2 ]

0 голосов
/ 27 июля 2011

Я не уверен, что правильно понимаю, но думаю (NOT) EXISTS следует использовать:

SELECT t1.* 
FROM table1 AS t1
  JOIN table2 AS t2 
    ON t2.item_id = t1.item_id
WHERE t2.id = '1' 
  AND t1.type NOT IN ('type1', 'type2')
  AND NOT ( t1.type = 'type3' 
            AND EXISTS 
                ( SELECT t3.item_id
                  FROM table3 AS t3
                  WHERE t3.id = t1.product_id
                    AND t3.item_id NOT IN
                          ( SELECT t2.item_id 
                            FROM table2 AS t2
                            WHERE t2.id = '1' )
                )
           ) 
  AND NOT ( t1.type = 'type4' 
            AND EXISTS 
                ( SELECT t4.item_id
                  FROM table4 AS t4
                  WHERE t4.id = t1.product_id
                    AND t4.item_id NOT IN
                          ( SELECT t2.item_id 
                            FROM table2 AS t2
                            WHERE t2.id = '1' )
                )
           ) 
ORDER BY WhatYouWant
LIMIT x,y
0 голосов
/ 27 июля 2011

применить flow control flow structure в mysql

CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE

Или:

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...