php - 如何使用 SELECT 通过 IN 和 EQUAL 命令获取行?

标签 php mysql sql select union

我有一个像这样的 mysql 表:

nid | vid| tid

我正在尝试获取 nid 值的列表,其中 tid19 AND 来自53、16 或 89。根据当前表,我希望查询返回 10,即 =19(第 4 行)和 IN (53,16,89)(最后一行)。

我可以将其作为 2 个独立的查询来获取,如下所示:

SELECT nid FROM {term_node} WHERE tid IN (53,16,89)

SELECT nid FROM {term_node} WHERE tid = 19

(term_node 是屏幕截图中的表)。我为此应用程序使用 PHP,因此我可以组合这两个查询的结果以获得所需的结果(即 10)。但我认为可能有一种方法可以从单个数据库查询中获取它。

我读到了 Union,但老实说我不知道​​如何使用它。 我希望我清楚这个问题并提前非常感谢你。

最佳答案

UNION 在这里帮不了你。你想要的是一个十字路口。一些数据库有一个 INTERSECT做你想做的事的关键字,但不幸的是不是 MySQL。

你可以通过使用内连接得到你想要的:

SELECT DISTINCT TN1.nid
FROM term_node AS TN1
JOIN term_node AS TN2
ON TN1.nid = TN2.nid
AND TN2.tid = 19
WHERE TN1.tid IN (53, 16, 89)

在线查看它:sqlfiddle

关于php - 如何使用 SELECT 通过 IN 和 EQUAL 命令获取行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021739/

相关文章:

php - Silverstripe HTML 字段验证

mysql - 获取日期转换 MySQL 时出错

php - 如何在动态生成表单的地方插入数据库值

SQL Server 触发器更新和增量计数器

php - 每 15 分钟执行一次更改数据库的功能

php - Laravel:file_put_contents()权限被拒绝-正确的存储/框架/缓存权限?

php - 在javascript中访问PHP变量

javascript - 将数据从 PHP(mysql) 传递到 AngularJS 时没有数据

sql - 在postgres中将日期字段转换为多个字段的最快方法

c# - 在 Where() 中使用 ToList().Last() 进行 Entity Framework 查询