【问题标题】:Get return even if value doesnt exist in where clause即使 where 子句中不存在值,也能获得回报
【发布时间】:2013-10-14 15:29:36
【问题描述】:

使用 PDO。

SELECT *
FROM time 
WHERE 
    UserId = :uid AND 
(
    week = :CurrentWeek || 
    week = :PreviousWeek1 || 
    week = :PreviousWeek2 || 
    week = :PreviousWeek3 || 
    week = :PreviousWeek4 || 
    week = :PreviousWeek5 
    ) 
GROUP BY week
ORDER BY week DESC

所以,我试图在这样的表格中打印出过去五周的时间加上当前的时间。

                v1      v2      v3      v4      v5      
    Person 1    40      40      40      40      40      
    Person 2    39      40      39      40      40

问题是,如果例如。 v3 不存在,它将 v4 推到 v3 的位置。我正在寻找试图获取所有周值的东西,如果它们不存在,它会返回该列的默认值。

我想以最好的方式解决这个问题。 (我当然可以每周循环并逐个获取值,但它必须是一种更有效的方式)

【问题讨论】:

  • 当你可以有week IN (:CurrentWeek, :PreviousWeek1, etc...)时,为什么会有这么丑陋的比较链?
  • 这不是最好的方法,但您可以使用联合对“表”进行外部连接。我前段时间遇到过类似的问题,但我不需要关心性能,...
  • 感谢您的输入。我不知道为什么马克,现在改变了。学过的知识。嗯,这似乎有点矫枉过正。我正在使用我在问题中提到的循环。

标签: php mysql sql select where


【解决方案1】:

除非您愿意generate fake data in MySQL(这根本没有效率),否则您应该获取过去五周的数据,然后在 php 中处理差距(这应该很简单)。这确实是“最好的方式”。

【讨论】:

  • 所以换句话说,最好的方法是每周创建一个循环,而不用大量不必要的数据?
  • 是的,您必须在 php 中遍历结果以检查差距。比在 SQL 中处理记录更有效
  • 好吧,就这样吧。感谢您的快速响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多