繁体   English   中英

MySQL查询从数据库中选择一个值等于两个不同事物之一的记录

[英]MySQL Query Selecting records from a database where a value equals one of two different things

我必须从MySQL DB获取记录,其中:

sentto = "$username"

要么

sentto = "everyone"

我如何将它放在MySQL查询中? 我尝试了一些东西,但它们似乎没有起作用:

mysql_query("SELECT * 
             FROM pmessages 
             WHERE status='unread' 
                 AND sentto='$username' || sentto='everyone'");

mysql_query("SELECT * 
             FROM pmessages 
             WHERE status='unread' 
             AND sentto='$username' 
                 AND sentto='everyone'");

我似乎很难过,如果有人知道如何以正确的方式做到这一点请告诉我。 对我来说这是一个新的场景。 谢谢!

SELECT * 
FROM pmmessages 
WHERE sentto = '$username' 
    OR sentto = 'everyone'

根据您的新查询编辑 Chris:

SELECT * 
FROM pmessages 
WHERE status='unread' 
    AND sentto='$username' 
OR sentto='everyone' 

你需要修改它,以便你的AND独立(它与你的OR相冲突)。

把它改写成这个

SELECT * 
FROM pmessages 
WHERE status='unread' 
    AND 
        (sentto='$username' 
            OR sentto='everyone' )

由于它是您正在测试的相同列,我将使用IN关键字:

SELECT * 
FROM pmessages 
WHERE status='unread' 
AND sentto IN ('everyone', '$username');

将您的一条评论中的详细信息考虑在内 - 使用“ OR ”关键字和括号来确保合并正确的条件。

SELECT * FROM pmessages WHERE
   status = 'unread'
    AND
  (sentto = ? OR sentto = 'everyone')

你的问题从未与OR ,但它实际上是AND优先级和缺少括号。 您在问题中完全忽略的非常重要的细节是“ status = unread ”的附加测试。

注意使用? 以上-你应该真的真的使用时结合MySQL和PHP,即准备好的语句:

$sql = "..." # as above
$sth = $db->prepare($sql);
$res = $sth->execute($username);
while ($row = $sth->fetchrow()) {
    ...
}

(或mysqli等价物)

OR是你正在寻找的:

mysql_query(“SELECT * FROM pmessages WHERE sentto ='$ username'或sentto ='everyone'”);

每个人都是实际价值,还是想要归还所有结果?

如果你想返回所有结果设置这样的东西

if (@sentto is null)
begin

     set @sendto='%'

end

mysql_query("SELECT * FROM pmessages WHERE sentto='$username'")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM