【问题标题】:MYSQL select query returning undesired resultsMYSQL 选择查询返回不需要的结果
【发布时间】:2015-03-21 02:56:28
【问题描述】:

我在 MySQL 中有这张表;

我正在尝试通过此查询在第 10 行获取 cc_rowid 10 和 cc_type In;

    $stmt = $mysqli->prepare("SELECT MAX(cc_rowid),MAX(cc_type)
    FROM clock_clockings
    WHERE cc_eeno =(SELECT cc_eeno FROM clock_clockings WHERE cc_rowid=?)");

它给了我 cc_rowid =10 和 cc_type=Out。

我不明白如何改进它以获得预期的结果。我将不胜感激这方面的任何帮助。谢谢

【问题讨论】:

  • 当你对一个字符串做最大值时你会得到什么?
  • @Minh 我认为它是字符串的最大字节大小,但它可能只是最长的字符长度。我也意识到这可能是一个反问:-p
  • MAX(cc_type) 这里是错误的,我们只能在数字的情况下使用 MAX() 聚合函数。 Out 的字符数比 In 多。所以它显示 cc_type=Out。

标签: php mysql select


【解决方案1】:

如果您尝试获取最大 cc_rowid 的 cc_type,您将需要类似以下内容:

SELECT cc_rowid, cc_type 
FROM clock_clockings 
WHERE cc_rowid = (SELECT max(cc_rowid) FROM clock_clockings);

您可以对内部联接和相同的子查询执行相同的操作。六个一个,六个另一个。您可以在子查询中添加更多 WHERE 逻辑,以过滤掉 max 聚合中不需要的任何其他内容

【讨论】:

  • 这很好用,然后我想我可以使用它; $stmt = $mysqli->prepare("SELECT cc_rowid , cc_type FROM clock_clockings WHERE cc_out IS NULL AND cc_eeno = (SELECT cu_eeno FROM clock_users WHERE cu_id = ?)");这将获取 cu_id 并将在 cc_out 列中获取空值 @Martin 非常感谢您抽出时间并以超快的速度回答..obliged
【解决方案2】:

JNevill 的回答对您很有帮助。但是我想补充一下您当前的问题是如何引起的:

  $stmt = $mysqli->prepare("SELECT MAX(cc_rowid),MAX(cc_type)
    FROM clock_clockings
    WHERE cc_eeno =(SELECT cc_eeno FROM clock_clockings WHERE cc_rowid=?)");

您当前正在尝试获取 cc_rowidcc_type 的 MAX 值,因为 cc_type 数据是一个字符串,它正在获取具有最大内容的字符串 - 最长 - 这就是为什么“Out”是被呈现。

您不需要此选择的 MAX,因此请尝试:

   $stmt = $mysqli->prepare("SELECT MAX(cc_rowid), cc_type
        FROM clock_clockings
        WHERE cc_eeno =(SELECT cc_eeno FROM clock_clockings WHERE cc_rowid=?)");

【讨论】:

  • 这个解决方案不会给出最大 cc_rowid 的 cc_type,它也错过了一个 cc_type 组,但它不会给出最大 cc_rowid 的 cc_type,它给出每个 cc_rowid 的最大值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 2017-09-17
  • 1970-01-01
  • 2021-11-27
  • 2017-05-18
相关资源
最近更新 更多