我知道这个问题已被多次询问,并且我已经阅读了所有答案,但没有一个似乎完全解决了我的问题。MS Access SQL:选择具有与IN子句相同顺序的行
我从mySQL数据库切换到MS Access数据库。在这两种情况下,我使用php脚本连接到数据库并执行SQL查询。
我需要找到一个合适的替代我曾经在mySQL上执行的查询。 我想:
- 执行按字母顺序根据列
- 之一的第一查询和订单记录建立ID的列表,它反映的是前字母顺序
- 与IN子句进行第二次查询与ID列表一起使用并按此列表排序。
在MySQL中我用来执行的最后一个查询是这样的:
SELECT name FROM users WHERE id IN ($name_ids) ORDER BY FIND_IN_SET(id,'$name_ids')
由于FIND_IN_SET
仅提供MySQL的数据和CHARINDEX
和PATINDEX
不能从我的PHP脚本,我怎么能做到这一点?
我知道我可以写的东西,如:
SELECT name
FROM users
WHERE id IN ($name_ids)
ORDER BY CASE id
WHEN ... THEN 1
WHEN ... THEN 2
WHEN ... THEN 3
WHEN ... THEN 4
END
,但你必须考虑到:
- 的ID名单具有可变长度和元素,因为它取决于第一查询
- 该列表可以很容易地包含数千个元素
你有没有对此有何暗示? 有没有办法以编程方式构造ORDER BY CASE ... WHEN ...
陈述? 由于我的ID列表可能很大,是否有更好的方法?
UPDATE:我执行两个分离的查询,因为我需要访问两个不同的表。 数据库并不是非常简单,所以我试着举一个例子: 假设我有一个表,其中包含一个用户列表和一个表,其中包含每个用户在其书架中的所有书籍。
由于dabase是在mySQL中设计的,对于每本书籍记录,我都将user_id存储在books表中以便在用户和书籍之间建立关系。
现在假设我想获得所有拥有以字母“a”开头的书名的用户的列表,并且我想根据书籍的字母顺序来订购用户。 这是我做的:
- 执行第一查询以查找所有以字母“A”开头的书籍和排序的字母顺序
- 创建的user_id的列表,它应该反映书的字母顺序
- users表中进行查询,以找出用户名和它们与USER_ID列表排序书具有所需的排序
希望澄清一下我需要什么。
这些必须是两个单独的查询吗?第一个看起来像什么?将它们结合起来或者重新考虑它们之间的联系是完全可能的。 – 2012-03-23 23:11:34
他们是单独的查询,因为在两个单独的表上执行。我会编辑这个问题来澄清这个问题 – Andrea3000 2012-03-23 23:20:33
什么,而且这两个表格不能'JOIN'ed?第一个表的名称和布局是什么? – 2012-03-23 23:29:11