【问题标题】:MySQL SELECT results from 1 table, but exclude results depending on another table?MySQL SELECT 来自 1 个表的结果,但根据另一个表排除结果?
【发布时间】:2010-05-19 04:01:23
【问题描述】:

如果我想从表 'messages' 中获取结果但排除具有字段 messages.message=messages_view.id AND messages.deleted=1 的 'messages_view' 中的值的行,我必须使用什么 SQL 查询AND messages_view.user=$somephp 变量

用更通俗的话来说,我有一个消息表,其中每个 message 都由一个“id”表示,还有一个 messages_view 表与一个“message”字段相连。我想获取 message 中特定“用户”未删除的行(来自 messages_view)。 'deleted'=1 当消息被删除时。

这是我当前的 SQL 查询,它只是从中获取值:

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')))

这是我的表格布局:

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    我真的觉得就这么简单:

    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
    )
    

    【讨论】:

      【解决方案2】:
      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
                          )
      

      您的第一段和第二段关于您想要删除的标志的内容存在矛盾。

      【讨论】:

        猜你喜欢
        • 2012-09-04
        • 1970-01-01
        • 2012-08-12
        • 1970-01-01
        • 2018-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        相关资源
        最近更新 更多