gpt4 book ai didi

php - MySQL:查询中的条件语句

转载 作者:行者123 更新时间:2023-11-29 08:17:52 25 4
gpt4 key购买 nike

我会尽量直接切入我想要在这里完成的任务......

我有一个有效的查询,但我最近发现了一个问题。现在,我可以简单地用 PHP 修复这个问题,但我知道它可以在 MySQL 中以某种方式完成......我只是不知道如何做。所以这就是正在发生的事情:

我有一个 USERS 表和一个 SERVICES 表。一个用户可以拥有多个服务(每个服务彼此完全独立),并且每个服务都有一个称为“状态”的字段。状态定义服务当前所处的状态:事件/非事件

当您转到“管理用户”页面时,将调用该查询,其中每个用户都被分为其所属的类别。对于本例,它将是:活跃用户 |已停用的用户 |其他用户(没有任何服务计划的用户)。

所以我的停用用户查询归结为:

 SELECT DISTINCT u.* FROM users u LEFT JOIN services s ON s.assignedto=u.id WHERE s.status!=1

该声明效果很好,但是,如果客户有 2 个服务计划,其中一个已激活,一个已停用,那么他将出现在停用列表和激活列表中。该语句需要一个条件,如果用户还具有激活的服务计划,则它将从查询中排除用户。现在,我有一些用户属于不应该存在的停用用户。

无论如何,先谢谢你了!

最佳答案

您可以按照 @GarethD 的建议,使用 not exits() 重写您的查询。

如果扩展性不好,要记住的另一种方法可能是 group by 子句,例如:

SELECT u.*
FROM users u
LEFT JOIN services s ON s.assignedto=u.id
GROUP BY u.id
HAVING max(s.status) <> 1

不过,最好的选择是一个额外的字段。如果您向 users 添加 status 字段,则可以直接对其进行索引和查询。您可以使用触发器来维护它,但就个人而言,这是一种罕见的情况,我发现在应用程序中维护它是一种更好的方法。 (基本上,您永远不知道何时需要快速将用户标记为非事件状态,而不会干扰其他数据库表。)

关于php - MySQL:查询中的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com