我有下表
DROP TABLE IF EXISTS `test`.`foo`;
CREATE TABLE `test`.`foo` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
然后我尝试根据主键获取记录
SELECT * FROM foo f where f.id IN (2, 3, 1);
Run Code Online (Sandbox Code Playgroud)
然后我得到以下结果
+----+--------+
| id | name |
+----+--------+
| 1 | first |
| 2 | second |
| 3 | third |
+----+--------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
可以看出,结果按id排序.我想要实现的是按照我在查询中提供的顺序获取结果.鉴于此示例,它应该返回
+----+--------+
| id | name |
+----+--------+
| 2 | …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用sequelize从数据库输出所有对象列表,如下所示,并希望获取数据,因为我在where子句中添加了id.
exports.getStaticCompanies = function () {
return Company.findAll({
where: {
id: [46128, 2865, 49569, 1488, 45600, 61991, 1418, 61919, 53326, 61680]
},
attributes: ['id', 'logo_version', 'logo_content_type', 'name', 'updated_at']
});
};
Run Code Online (Sandbox Code Playgroud)
但问题是在渲染之后,所有数据都按如下方式排序.
46128, 53326, 2865, 1488, 45600, 61680, 49569, 1418, ....
Run Code Online (Sandbox Code Playgroud)
正如我发现的那样,它既没有按ID也没有名称.请帮我解决一下.
可能重复:
按SQL IN()子句中的值顺序排序
使用如下查询:
SELECT * FROM images WHERE id IN (12,9,15,3,1)
Run Code Online (Sandbox Code Playgroud)
是否可以通过IN子句的内容对结果进行排序?
我正在寻找的结果将是这样的:
[0] => Array
(
[id] => 12
[file_name] => foo
)
[1] => Array
(
[id] => 9
[file_name] => bar
)
[2] => Array
(
[id] => 15
[file_name] => baz
)
...
Run Code Online (Sandbox Code Playgroud) 是否可以通过查询中提供的元素列表对django查询集进行排序?例如,如果我这样做
m.objects.filter(id__in=[3,1,8])
Run Code Online (Sandbox Code Playgroud)
我不希望查询集的顺序是id 3的元素,id 1的元素和id 8的元素.
谢谢
有一个奇怪的问题.我们正在使用MariaDB 5.5和doctrine/orm 2.3.3,并尝试使用带有DQL的Doctrine Paginator. http://docs.doctrine-project.org/en/latest/tutorials/pagination.html
DQL有一个ORDER BY子句[参见下面的插图示例].但是,对于给定的页面大小,结果根本不会排序.而且,如果我们增加页面大小以覆盖整个结果集,则排序变得正确.
$dql = "SELECT a, b FROM EntityA a JOIN a.propertyB b ORDER BY a.createdOn DESC";
$query = $this->em->createQuery($dql)
->setMaxResults($pageSize)
->setFirstResult($offset);
$paginator = new Paginator($query, $fetchJoinCollection=true);
....
Run Code Online (Sandbox Code Playgroud)
我转储了sql并手动运行它.sql也给出了正确的排序.所以有些东西导致了Doctrine的Paginator类中的排序问题.
当我设置$ fetchJoinCollection = false并将其传递给Paginator构造函数时,对于任何给定的$ pageSize,排序都是正确的!
阅读Doctrine源代码[Doctrine/ORM/Tools/Pagination/Paginator.php].使用$ fetchJoinCollection = true,doctrine使用WhereInWalker获取最终结果,该结果不遵循DQL中的ORDER By子句,因为IN()子句不会以与内部ID相同的顺序生成结果. IN()子句.
可以在按SQL IN()子句中的值顺序排序中找到IN()子句的排序解决方案.但我找不到使用它的Doctrine.
任何具有学说内在知识的人都会有所帮助吗?!谢谢!
在使用IN运算符的MySQL中,我们可以要求MySQL以与IN集相同的顺序返回结果集(记录集)吗?
解释:假设我们有一张桌子
items (item_id, item_name);
和查询:
select * from items where item_id in (1,3,5,7,2,4,6,8);
我们可以得到结果集(记录集),其中记录与IN运算符集的顺序相同.即1,3,5,7,2,4,6,8 of record_ids
事实并非如此; MySQL似乎优化了搜索并提供了默认顺序(与存储在文件系统上的那些记录的顺序相同).
如何通过带有id的数组使用doctrine2命令?
我有这个问题:
$qb = $this->createQueryBuilder('u')
->select('u', 'n', 'c')
->leftJoin('u.notifications', 'n')
->leftJoin('u.channel', 'c')
->andWhere('u.id IN (:ids)')
->setParameter('ids', $ids);
Run Code Online (Sandbox Code Playgroud)
我希望结果与带有id的数组具有相同的顺序,是否可以这样做?
谢谢
解:
使用FIELD mysql扩展与https://github.com/beberlei/DoctrineExtensions
:)
谢谢
这是我的查询:
SELECT * FROM article WHERE id IN (300, 400, 100)
Run Code Online (Sandbox Code Playgroud)
但它总是通过id命令文章相同.
所以我会出于上述情况:
id
100
300
400
Run Code Online (Sandbox Code Playgroud)
有没有办法按照IN语句中请求的顺序得出结果?例如.
id
300
400
100
Run Code Online (Sandbox Code Playgroud) 我有一个以逗号分隔的id列表,我想用它来从数据库中检索记录.我可以使用IN语句来获取结果,但我希望结果的顺序与原始列表的顺序相同.
例如
$list = "3,1,4,2,5";
$query = "SELECT * FROM table WHERE id IN (" . $list . ")";
$result = @mysql_query($query);
while($row=mysql_fetch_array($result)){
echo($row['id']. ", " ); // returns 1, 2, 3, 4, 5
}
Run Code Online (Sandbox Code Playgroud)
好的,所以我按照它们出现在数据库中的顺序得到结果 - 足够公平,但我希望结果与原始列表的顺序相同,我希望SQL首先检索3,然后是1等...
是否有一个SQL命令来执行此操作,或者我只是需要按照我需要的方式通过某些数组洗牌来排列结果?做这个的最好方式是什么?
谢谢
我需要一个SELECT带有IN子句的查询,以及Order by:
select *
from table
where column_id IN (5,64,2,8,7,1)
Run Code Online (Sandbox Code Playgroud)
此代码返回1, 2, 5, 7, 8, 64.
现在我需要按顺序返回相同的选择
输出需要是: 5, 64, 2, 8, 7, 1
在Mysql中,有字段选项,但SQL Server没有这样的字段选项.
mysql ×5
sql ×3
doctrine-orm ×2
php ×2
sql-order-by ×2
arrays ×1
django ×1
doctrine-odm ×1
express ×1
node.js ×1
orm ×1
python ×1
sequelize.js ×1
sql-server ×1
symfony ×1