【问题标题】:MySQL: AND + Parameter selecting and skipping issueMySQL:AND + 参数选择和跳过问题
【发布时间】:2017-08-21 19:44:06
【问题描述】:

我的问题与这个已经解决的 Question 相关,但我无法让它工作。

所以我有这个查询,它应该首先过滤“type”列,然后过滤“lastChange”列中的最小时间戳。时间戳会经常更新。

SELECT * FROM api 
WHERE (type = 'Public') AND (lastChange = ( SELECT MIN(lastChange) FROM api ));

它似乎过滤了值,因为当我到达保存 type = 'Private' 的行时,结果将为空。

type != 'Public' // doesn't work either, because I have more than two values

但是查询不应该实际上跳过所有不包含 type = 'Public' 的行,只返回那些具有积极结果的行 - 我怎样才能正确地实现这一点?

【问题讨论】:

  • 如果您只是想找到最新的,WHERE `type` = 'Public' ORDER BY lastChange desc LIMIT 1 应该可以。注意type 周围的反引号,因为它是 MySQL 中的一个特殊词。
  • 我不能对上述评论给予足够的支持。这是解决此问题的方法,并且它包含有关您在查询中可能遇到的错误的专业提示。
  • @aynber 没有必要勾选TYPE,因为它只是一个关键字dev.mysql.com/doc/refman/5.7/en/keywords.html,而不是保留。旁边没有(R)

标签: php mysql mysqli pdo


【解决方案1】:

您在 lastChange 右侧的 SELECT 为所有记录返回一个最小值,但您只需要公共类型的 MIN 值,您需要在查询中指定。

SELECT * FROM api 
WHERE (type = 'Public') 
AND (lastChange = ( 
    SELECT MIN(lastChange) 
    FROM api AS t2 
    WHERE t2.type = "Public"
    )
);

【讨论】:

  • 做或不做,没有“尝试”。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
猜你喜欢
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多