в моем приложении (Голосование по изображениям) У меня есть несколько ролей для пользователя, избиратель & Администратор.MySQL, JOIN через несколько таблиц и не IN?
Выбрать для пользователя выглядит следующим образом:
SELECT * from wp_awa_upload, category, subcategory
WHERE wp_awa_upload.uid = '$_SESSION[id]'
AND wp_awa_upload.parent_cat = category.cat_id
AND wp_awa_upload.sub_cat = subcategory.id
Пользователь может просто увидеть свои собственные изображения, но избиратель должен увидеть все изображения, на которых он не голосовал. Когда избиратель голосует, в таблицу «wp_awa_session» войдет новая запись с идентификатором загруженного изображения и его собственным идентификатором. Таким образом, выбор выше должен быть принят с «и где Session_ID и Uploaded ID не находятся в состоянии« wp_awa_session »в таблице».
Как я могу это достичь?
, вероятно, более эффективные способы, чтобы сделать это с OUTER JOINS или ВНУТРЕННИЙ JOINS, но делает это Работа? SELECT wau. *, C. *, S. * From wp_awa_upload wau JOIN category c ON c.cat_id = wau.parent_cat JOIN подкатегория s ON s.id = wau.sub_cat WHERE wau.uid = '$ _SESSION [id ] ' И' $ _SESSION [id] 'NOT IN (SELECT uid FROM wp_awa_upload WHERE uid =' $ _SESSION [id]) –
Не используйте ',' сокращение для соединения. Попробуйте использовать 'ON()' или 'USING()' вместо предложений WHERE для присоединения. Это делает запрос более понятным. [Ответ Teoman здесь] (http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-joins) может вам помочь. – Fox