当我有一个具有分隔值的列时,我可以使用该unnest()函数:
myTable
id | elements
---+------------
1 |ab,cd,efg,hi
2 |jk,lm,no,pq
3 |rstuv,wxyz
select id, unnest(string_to_array(elements, ',')) AS elem
from myTable
id | elem
---+-----
1 | ab
1 | cd
1 | efg
1 | hi
2 | jk
...
Run Code Online (Sandbox Code Playgroud)
我如何包含元素编号?即:
id | elem | nr
---+------+---
1 | ab | 1
1 | cd | 2
1 | efg | 3
1 | hi | 4
2 | jk | 1
...
Run Code Online (Sandbox Code Playgroud)
我想要源字符串中每个元素的原始位置.我试着窗口函数(row_number(), …
sql arrays postgresql window-functions set-returning-functions
我不久前发现了这个,并且从那时起就一直在使用它; 然而,今天看着它,我意识到我并不完全理解为什么它有效.有人可以为我解释一下吗?
ORDER BY s.type!= 'Nails',
s.type!= 'Bolts',
s.type!= 'Washers',
s.type!= 'Screws',
s.type!= 'Staples',
s.type!= 'Nuts', ...
Run Code Online (Sandbox Code Playgroud)
如果我按s.type订购,则按字母顺序排序.如果我使用上面的示例,它使用与行位置相同的顺序.我不明白的是使用!=.如果我使用=它会以相反的顺序出现.我无法理解这个概念.
我会告诉我,使用=代替上面的!=将Nails放在第一位,但它没有,它把它放在最后.我想我的问题是:为什么我必须使用!=,not =在这种情况下?
我有一个查询来获取特定顺序的人的ID,比如说:
ids = [1, 3, 5, 9, 6, 2]
然后,我想要通过获取这些人 Person.find(ids)
但它们总是以数字顺序提取,我通过执行以下方式知道:
people = Person.find(ids).map(&:id)
=> [1, 2, 3, 5, 6, 9]
Run Code Online (Sandbox Code Playgroud)
如何运行此查询以使顺序与ids数组的顺序相同?
我使这个任务变得更加困难,因为我只想执行查询以从给定的ID中获取一次.因此,执行多个查询是不可能的.
我尝试过类似的东西:
ids.each do |i|
person = people.where('id = ?', i)
Run Code Online (Sandbox Code Playgroud)
但我认为这不起作用.
我在服务器日志中收到警告"使用集合提取指定的firstResult/maxResults;在内存中应用!" .然而一切正常.但我不想要这个警告.
public employee find(int id) {
return (employee) getEntityManager().createQuery(QUERY).setParameter("id", id).getSingleResult();
}
Run Code Online (Sandbox Code Playgroud)
QUERY = "from employee as emp left join fetch emp.salary left join fetch emp.department where emp.id = :id"
Run Code Online (Sandbox Code Playgroud) 我正在使用SphinxSearch查询一些内容并拥有我想用MySQL查询的对象的id.我的ID数组根据Sphinx给出的等级排序.因此,我想像这样制作一个MySQL:
SELECT * FROM table WHERE id IN (1,17,2)
ORDER BY FIELD(id,1,17,2)
Run Code Online (Sandbox Code Playgroud)
我知道我能做到:
Table::whereIn('id', $ids)->get();
Run Code Online (Sandbox Code Playgroud)
但我无法得到我的订单.
我怎么能用Laravel以适当的方式做到这一点?
我正在考虑解决问题的最佳方案.假设我们有一个ActiveRecord模型的ID列表:
ids = [1, 100, 5, 30, 4, 2, 88, 44]
Run Code Online (Sandbox Code Playgroud)
然后我想进行查询,选择所有用户,例如列表中的ID,但保持订单.如果我做
User.where(id: ids)
Run Code Online (Sandbox Code Playgroud)
响应将是具有asc order by id的用户列表,但我希望订单与数组中的顺序相同.
您认为这是最好的解决方案吗?选择所有用户,然后操作ActiveRecord对象列表?也许有一种更聪明的方法可以做到这一点.
谢谢!
我有一个包含插入顺序的列表.我想使用相同的顺序对结果进行分页.正如您目前所看到的,输出将是不同的顺序.
following_companies_list_data = Company.query.filter(Company.id.in_(['2', '24', '1', '7', '373'])).paginate(
page, per_page=10, error_out=False)
companies = following_companies_list_data.items
for i in companies:
print i.id
7
24
373
2
1
Run Code Online (Sandbox Code Playgroud)
相关问题
例如我在表EMPLOYEE中:
(code, name)
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )
Run Code Online (Sandbox Code Playgroud)
如果您这样做:(从EMPLOYEE中选择*)您将得到:
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )
Run Code Online (Sandbox Code Playgroud)
如果您这样做:(从EMPLOYEE中选择*,您将获得(1,3,2,4)中的代码:
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )
Run Code Online (Sandbox Code Playgroud)
如何按IN子句中的CSV值顺序获取它,原样如何?
(1, 'Jimmy')
(3, 'Michelle')
(2, 'Albert')
(4, 'Felix' )
Run Code Online (Sandbox Code Playgroud) 我有来自外部 postgresql 数据库的 ID 列表。
A = [1,2,3,4,5,6,7,98,0]
Run Code Online (Sandbox Code Playgroud)
我会使用 SQLAlchemy 对数据库进行查询,但我会按 A 列表对 postgresql 中的数据进行排序。
我已经阅读了很多文档,但找不到任何关于如何做到这一点的建议。
所以,最后我会有:
results = session.query(user).limit(20).offset(10).order_by(A)
Run Code Online (Sandbox Code Playgroud)
干杯
更新:
我找到了解决方案,它没有我预期的那么好,但效果很好。无论如何,如果您知道更好的解决方案,请告诉我!
ids = ','.join([str(i) for i in A])
results = session.query(user).filter(user.id.in_(A)).\
limit(20).offset(10).\
order_by(" position(CONCAT(',',users.id::text,',') in ',{0},'.format(ids)")
Run Code Online (Sandbox Code Playgroud) 假设我有一个模型My_model,并且有该模型的 id 列表;
my_ids = [3,2,1,42]
Run Code Online (Sandbox Code Playgroud)
现在我想获得一个带有My_model.objectsid 的 QuerySet。我已经找到了这个解决方案,但它对我不起作用,因为我希望 QuerySet 中的对象与my_ids.
如何在 Django 和 Python 中转换 QuerySet 中的 id 列表?
postgresql ×4
python ×3
sql ×3
mysql ×2
sql-order-by ×2
sqlalchemy ×2
activerecord ×1
arrays ×1
django ×1
ejb-3.0 ×1
flask ×1
hibernate ×1
java ×1
jpa ×1
jpql ×1
laravel ×1
php ×1
sphinx ×1
sqlite ×1