相关疑难解决方法(0)

维护MySQL"IN"查询中的顺序

我有下表

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)

mysql sql

46
推荐指数
2
解决办法
1万
查看次数

sequelize在nodejs中查找所有排序顺序

我正在尝试使用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也没有名称.请帮我解决一下.

node.js express sequelize.js

43
推荐指数
5
解决办法
6万
查看次数

使用SELECT ... WHERE id IN(...),按IN()排序结果?

可能重复:
按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)

mysql sql sql-order-by

18
推荐指数
1
解决办法
2万
查看次数

按列表中的值对查询集进行排序

是否可以通过查询中提供的元素列表对django查询集进行排序?例如,如果我这样做

m.objects.filter(id__in=[3,1,8])
Run Code Online (Sandbox Code Playgroud)

我不希望查询集的顺序是id 3的元素,id 1的元素和id 8的元素.

谢谢

python django

10
推荐指数
4
解决办法
9434
查看次数

带有"$ fetchJoinCollection = true"的Paginator在学说DQL中不会尊重"ORDER BY"吗?

有一个奇怪的问题.我们正在使用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.

任何具有学说内在知识的人都会有所帮助吗?!谢谢!

php orm doctrine-orm

10
推荐指数
1
解决办法
1277
查看次数

MySQL IN运算符结果集顺序

在使用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似乎优化了搜索并提供了默认顺序(与存储在文件系统上的那些记录的顺序相同).

mysql sql-order-by

5
推荐指数
1
解决办法
751
查看次数

带有ids的数组的doctrine2顺序

如何通过带有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

:)

谢谢

doctrine-query symfony doctrine-orm doctrine-odm

5
推荐指数
2
解决办法
2767
查看次数

使用IN和订购?

这是我的查询:

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)

mysql

5
推荐指数
1
解决办法
43
查看次数

SQL IN语句并对结果进行排序

我有一个以逗号分隔的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命令来执行此操作,或者我只是需要按照我需要的方式通过某些数组洗牌来排列结果?做这个的最好方式是什么?

谢谢

php mysql arrays

4
推荐指数
1
解决办法
493
查看次数

SQL Server使用IN()选择查询并按顺序排序

我需要一个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没有这样的字段选项.

sql sql-server

3
推荐指数
2
解决办法
3120
查看次数