【问题标题】:How to retrieve all records after one with an ID in symfony?如何在 symfony 中检索具有 ID 的所有记录?
【发布时间】:2013-03-01 00:32:48
【问题描述】:

假设我有一张在 symfony 中按字母顺序排序的表格。每个项目都有一个相当随机的 ID,我想检索某个 ID 之后的所有项目。例如:

Name      ID
------------
Apple     5
Banana    9
Coconut   3
Date      1
Eggplant  8

假设我想检索DateEggplant。我事先知道 ID 3,并且我想要它之后的一切。

我应该如何构造语句来实现这一点?

我不在乎答案是否使用 Propel、MySQL、SQL 或其他。只要有可能。

【问题讨论】:

  • 你能提供一些更好的细节吗?您知道 ID# 并且想要它之后的所有内容吗?之后的一切?日期或茄子的ID?按字母顺序,日期之后是什么?我只是不明白你在问什么。
  • @JustAguy:是的,ID 3 将被硬编码。在按字母顺序排序后,我想要 ID 为 3(椰子)之后的所有内容。在这种情况下,查询将返回 DateEggplant 记录。如果需要进一步解释,请告诉我。
  • 列名NAME是否有索引?

标签: php mysql sql orm symfony-1.4


【解决方案1】:
SELECT *
FROM tbl1
WHERE name > (
  SELECT name
  FROM tbl1
  WHERE id = 3
)
ORDER BY name

(至少与 Postgres 和 Just Aguy 的 SQL Fiddle 一起运行)

【讨论】:

  • 谢谢,这似乎可行,但有没有办法让它忽略椰子?我只希望它返回日期和茄子。另外,你会不会碰巧知道该声明的 symfony 等价物?
  • @Benjamin M - 您需要在外部查询中使用 ORDER BY Name 才能完全按照 OP 想要的方式获得结果。
  • 它会忽略 id=3 的条目。你测试过吗? ..我从来没有用过symfony。对不起。
  • @PM77-1:没有ORDER 子句的查询仍然会产生正确的结果,只是顺序不同。
  • @John Smith - 本杰明的代码不会返回“Coconut”。请参阅此 Fiddle(借自 Just Guy):sqlfiddle.com/#!3/ca77d/1 Just Guy 的解决方案使用不同的 ID 值,这就是他得到不同结果的原因。
【解决方案2】:

这是一个SQLFiddle,它显示了这个工作。查询很简单,只对第一个字母做一些匹配。我不喜欢 3 的硬编码值存在的想法。是否有一个进程会设置 id 的值?

    select name from tbl1 
    where (Left(name,1)) > (select Left(name,1) 
                        from tbl1 where id = 3)
    order by name asc

【讨论】:

  • 但是您的查询有一个小问题:您还将检索 id=3 的name。问题是I know beforehand of the ID 3 and that I want everything **after it**.
  • 但是如果有2个首字母相同的条目就不行了!
  • 看这里:sqlfiddle.com/#!3/c42c5/1/0Bubabing 也应该被退回
猜你喜欢
  • 2018-10-02
  • 1970-01-01
  • 2018-12-11
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2023-03-24
相关资源
最近更新 更多