我在PostgreSQL 8.3中有一个简单的SQL查询,可以获取一堆注释.我在子句中为构造提供了一个值的排序列表:INWHERE
SELECT * FROM comments WHERE (comments.id IN (1,3,2,4));
Run Code Online (Sandbox Code Playgroud)
这将以任意顺序返回注释,在我碰巧是ids之类的1,2,3,4.
我希望结果行像IN构造中的列表一样排序:(1,3,2,4).
怎么实现呢?
我正在从具有整数id值的大表(数百万行)中选择一组帐户记录.从某种意义上说,作为一个人获得的查询的基础.我正在做什么构建一个大的逗号分隔列表,并将其作为"in"子句传递给查询.现在结果是完全无序的.我想要做的是按照"in"子句中的值的顺序返回结果.
我假设我将不得不构建一个临时表并进行连接,我想避免,但可能无法做到.
思考?现在查询的大小限制在每个约60k,因为我们试图限制输出大小,但它可能是任意大的,这可能排除了从实际角度来看的"in"查询,如果不是物理的.
提前致谢.
我选择产品
$products = Mage::getModel('catalog/product')->getCollection()->addAttributeToFilter('entity_id', array('in' => $productIds));
Run Code Online (Sandbox Code Playgroud)
我怎么能认为该集合与$ productIds中的ID的顺序相同?
谢谢
例如:从T中选择*,其中T.id IN(4,78,12,45)
我希望返回的记录集按"IN"子句中的位置排序.我怎样才能做到这一点?
考虑这个MySQL查询:
SELECT
someColumns
FROM
someTable
WHERE
someColumn IN ( value1, value2, value3 )
Run Code Online (Sandbox Code Playgroud)
...我怎样才能保证行集按照赋予该IN ()子句的值的确切顺序排序?我认为如果不给它一个ORDER BY条款就不能保证,是吗?
PS.:子句
的值IN ()将是一个由PHP传递给查询的任意数据数组(利用Zend Framework的select语句),方式如下:
->where( 'someColumn in (?)', $theArrayWithValues );
Run Code Online (Sandbox Code Playgroud) 假设我有一个查询"select*from where where where in(0,2,5,1,3)",我实际上希望以相同的顺序返回它们指定where子句的行.ID的顺序将从查询更改为查询,并且订单没有模式.
我知道可以改变数据模型,创建临时表等.但请相信我,这些类型的解决方案在我的情况下不起作用.我也无法改变应用程序代码中结果对象的顺序.
我也知道不同的数据库引擎对事物的排序方式不同,在某些情况下无法保证等等等等.我只想不,这可能吗?
如果有帮助我将使用mysql或sql server :)
mysql ×4
sql ×4
sql-order-by ×2
database ×1
magento ×1
postgresql ×1
select ×1
sorting ×1
sql-in ×1
sql-server ×1