2015-04-24 3 views
0

в моем приложении (Голосование по изображениям) У меня есть несколько ролей для пользователя, избиратель & Администратор.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 »в таблице».

Как я могу это достичь?

+0

, вероятно, более эффективные способы, чтобы сделать это с 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]) –

+0

Не используйте ',' сокращение для соединения. Попробуйте использовать 'ON()' или 'USING()' вместо предложений WHERE для присоединения. Это делает запрос более понятным. [Ответ Teoman здесь] (http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-joins) может вам помочь. – Fox

ответ

0

это правильный Выбрать :-)

SELECT * 
 
FROM wp_awa_upload wau 
 
JOIN category c ON (wau.parent_cat = c.cat_id) 
 
JOIN subcategory s ON s.id = wau.sub_cat 
 
WHERE STATUS = '1' 
 
AND (
 
wau.id, wau.uid 
 
) NOT 
 
IN (
 

 
SELECT upload_id, user_id 
 
FROM wp_awa_session 
 
WHERE user_id = '$_SESSION[id]' 
 
AND upload_id = wau.id 
 
)

Спасибо за вашу помощь :-)

Смежные вопросы