嵌套表的最佳查询语法?

Posted

技术标签:

【中文标题】嵌套表的最佳查询语法?【英文标题】:Best query syntax for nested tables? 【发布时间】:2009-01-10 22:30:15 【问题描述】:

我的表中有一个名为 category_id 的数字字段。我想做这样的事情。

$ids=implode(',',$id_array);
$sql="SELECT * FROM myTbl WHERE IN(category_id,'$ids')";

应该输出如下内容:

SELECT * FROM myTbl WHERE IN(category_id,'1,2,3,4,5,6');

这可能吗?我是否为此使用了正确的语法?有没有更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

几乎,但不完全——这是它可以工作的一种方式

$ids="'".implode("','",$id_array)."'";
$sql="SELECT * FROM myTbl WHERE category_id IN($ids)";

应该输出如下内容:

SELECT * FROM myTbl WHERE category_id IN('1', '2', '3', '4', '5', '6');

请注意,由于该字段是数字,因此引号是不必要的,但它是一种有用的代码习惯用法,用于构建带引号的字符串列表。在您的情况下,您可以简化为

$ids=implode(',',$id_array);

(为了清楚起见,我假设数组不为空,数组元素已被净化等!)

【讨论】:

category_id 是一个数字字段,IN 中不需要引号 是的,错过了他明确说明的情况。已修改。【参考方案2】:

你从哪里得到 id 数组?如果它来自数据库,您应该考虑在那里进行所有操作:

SELECT * FROM myTbl WHERE c_id IN (SELECT c_id FROM yourTable WHERE ...);

【讨论】:

谢谢,让事情变得更快【参考方案3】:

是的,mysql的语法是这样的:

SELECT * FROM myTbl WHERE category_id IN(1,2,3,4,5,6);

(因为值是整数,所以它们不需要引号。如果它们是字符串,它们每个都需要用自己的引号括起来 - category_id IN ('a', 'b')

【讨论】:

以上是关于嵌套表的最佳查询语法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在查询中取消嵌套嵌套表的集合?

四联表的级联查询(嵌套)

如何在另一个表的大查询中创建一个包含嵌套数据的新表?

具有多重嵌套表的分组方式和计数作为 LINQ 查询

AWS Quicksight,Redshift“引用嵌套表的子查询不能包含 WINDOW 操作”

mysql中部门表的自我嵌套查询