Как подать в суд на подзапросы - PullRequest
0 голосов
/ 01 сентября 2011
  $logged = $_SESSION['logged'];

  $construct =  "SELECT child.* 
                 FROM products child 
                 LEFT JOIN products parent on parent.sid=child.sid 
                 WHERE parent.id =
                   '(SELECT productid 
                     FROM subscribed 
                     WHERE username=\"$logged\")' 
                 AND parent.keyword != child.name 
                 ORDER BY child.id DESC";  

У меня проблемы с тем, чтобы заставить работать подзапрос, я получаю неправильные результаты.С родительским запросом все в порядке, потому что я использовал его раньше.

Я хочу, чтобы подзапрос получил все продукты из таблицы «подписка», где username = $ logged.

Это то, что я хочуно в одном запросе проверьте предложение WHERE на предмет различий.

$construct =  "SELECT child.* 
               FROM products child 
               LEFT JOIN products parent on parent.sid=child.sid 
               WHERE parent.id= 
                 'SUB QUERY RESULT 1' 
               AND parent.keyword != child.name 
               ORDER BY child.id DESC"; 

$construct =  "SELECT child.* 
               FROM products child 
               LEFT JOIN products parent on parent.sid=child.sid 
               WHERE parent.id=
                 'SUB QUERY RESULT 2' 
               AND parent.keyword != child.name 
               ORDER BY child.id DESC"; 

$construct =  "SELECT child.* 
               FROM products child 
               LEFT JOIN products parent on parent.sid=child.sid 
               WHERE parent.id=
                 'SUB QUERY RESULT 3' 
               AND parent.keyword != child.name 
               ORDER BY child.id DESC"; 

Как мне сделать это в одном запросе без зацикливания запроса.Мне даже нужен подзапрос?

1 Ответ

1 голос
/ 01 сентября 2011

Вы можете использовать внутреннее соединение, чтобы делать то, что вы хотите:

 $construct = "SELECT child.*         
   FROM products child         
   LEFT JOIN products parent on parent.sid=child.sid         
   INNER JOIN subscibed s ON (s.productid = parent.id) 
   WHERE s.username = '$logged' 
     AND parent.keyword != child.name         
   ORDER BY child.id DESC";  

Если вы хотите, чтобы три запроса объединились в одну команду:

$construct =  "SELECT child.*              
           FROM products child              
               LEFT JOIN products parent on (parent.sid = child.sid)              
           WHERE parent.id IN             
                 (SELECT productid FROM table1 WHERE username= '$logged'
                UNION 
                  SELECT productid FROM table2 WHERE something = '$somethingelse'
                UNION 
                  SELECT productid FROM table3 WHERE otherthing = '$otherstuff'
                 )              
           AND parent.keyword != child.name              
           ORDER BY child.id DESC"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...