2010-05-19 4 views
0

Quelle requête SQL devrais-je utiliser si je veux obtenir les résultats d'une table 'messages' mais exclure les lignes qui ont la valeur dans 'messages_view' où field messages.message = messages_view.id AND messages.deleted = 1 AND messages_view.user = $ somephpvariableMySQL SELECT résultats de 1 table, mais exclut les résultats en fonction d'une autre table?

en ce qui concerne plus de laïcs, j'ai une table de messages avec chaque un message noté par un 'id', ainsi qu'un messages_view table reliée à un champ 'message'. Je veux obtenir les lignes dans message qui ne sont pas supprimés (vient de messages_view) pour un 'utilisateur' spécifique. 'deleted' = 1 lorsque le message est effacé.

Voici ma requête en cours de SQL qui obtient juste les valeurs de:

SELECT * FROM messages WHERE ((m_to=$user_id) 
    OR (m_to=0 AND (m_to_state='' OR m_to_state='$state') 
    AND (m_to_city='' OR m_to_city='$city'))) 

Voici la mise en page de mes tableaux:

table: messages 
---------------------------- 
id (INT) (auto increment) 
m_from (INT)      <-- Represents a user id (0 = site admin) 
m_to (INT)      <-- Represents a user id (0 = all users) 
m_to_state (VARCHAR) 
m_to_city (VARCHAR) 

table: messages_view 
---------------------------- 
message (INT)     <-- Corresponds to messages.id above 
user (INT)      <-- Represents a user id 
deleted (INT)     <-- 1 = deleted 

Répondre

0

Je pense vraiment que c'est aussi simple que cela:

SELECT * FROM messages WHERE ((m_to=$user_id) 
    OR (m_to=0 AND (m_to_state='' OR m_to_state='$state') 
    AND (m_to_city='' OR m_to_city='$city'))) 
AND NOT EXISTS (
    SELECT * 
    FROM messages_view 
    WHERE messages.message = messages_view.id 
     AND messages.deleted = 1 
     AND messages_view.user = $somephpvariable 
) 
+0

À la votre! Avec un peu de violon, je l'ai eu au travail, merci. – Brandon

0
Select ... 
From Messages M 
Where M.deleted = 0 
    And Not Exists (
        Select 1 
        From Messages_View MV1 
        Where MV1.message = messages_view.Id 
         And MV1.user = $somephpvariable 
        ) 

Il est une contradiction de votre premier paragraphe et votre deuxième paragraphe quant à ce que vous voulez en ce qui concerne le drapeau supprimé.

Questions connexes