【问题标题】:MYSQL PHP with order by and limit 1 returning nullMYSQL PHP 与 order by 和 limit 1 返回 null
【发布时间】:2019-10-26 03:25:55
【问题描述】:

我正在尝试选择第一行,其中可以有任意数量的行,这些行具有对它们进行分组的公共唯一 ID(不一定在数据库中按顺序排列)。

我在主列上使用 ORDER BY,它是一个完全唯一的 ID,是一个 int(11) 并使用 LIMIT 1。

$orderins = $db->Execute("select *
                    from " . TABLE_ORDERS_STATUS_HISTORY . "
                    where orders_id = '.$zv_orders_id.' order by orders_status_history_id ASC LIMIT 1");


$orderins = $orderins->fields['comments']; // SEND VAR

orders_status_history_id 是主要的(完全唯一的 ID),也是第一列,使用自动增量。

orders_id 是分组行将共享的共享 ID。共享此 id 的行不一定是一个接一个。

我得到一个空结果。

当我删除 ORDER BY 时,它会发送一个结果。

让我还包括,当我删除 ORDER BY 时,到目前为止它只返回了包含多个测试的第一行。

返回具有该 orders_id 的数据库中存在的第一行实际上是所需的结果。所以也许我不需要 ORDER BY 来工作或在那里。我能否确定 LIMIT 1 将始终获得与 WHERE BY 匹配的数据库中的第一行,或者它是否有可能返回也共享 WHERE BY 过滤器的其他行之一。

【问题讨论】:

  • 尝试将其更改为 "SELECT * FROM `" . TABLE_ORDERS_STATUS_HISTORY . "` WHERE `orders_id` = '.$zv_orders_id.' ORDER BY `orders_status_history_id` ASC LIMIT 1" -- 只需在列名周围加上引号 thingamabobs 就已经救了我了
  • 也尝试将其更改为 ORDER BY 而不是 order by
  • @E2017 抱歉,我忘了说,我确实尝试过,但没有成功。
  • 您正在混合使用双引号和单引号,将您的查询更改为"select * from " . TABLE_ORDERS_STATUS_HISTORY . " where orders_id = '{$zv_orders_id}' order by orders_status_history_id ASC LIMIT 1"
  • 等待尝试更改它"SELECT * FROM " . TABLE_ORDERS_STATUS_HISTORY . " where orders_id = '$zv_orders_id' order by orders_status_history_id ASC LIMIT 1"

标签: php mysql sql-order-by limit


【解决方案1】:

PHP 是一种非常令人困惑的语言,两个不同的引号实际上是非常不同的。你碰巧把它们弄混了,这是一个容易犯的错误。要修复它,请尝试将查询更改为:

"SELECT * FROM " . TABLE_ORDERS_STATUS_HISTORY . " where orders_id = '$zv_orders_id' order by orders_status_history_id ASC LIMIT 1"

它现在应该可以工作了。

也可以看看catcon的评论

【讨论】:

    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多