【问题标题】:MySQL 1052 Column 'userid' in field list is ambiguousMySQL 1052 字段列表中的列 'userid' 不明确
【发布时间】:2017-07-21 17:41:39
【问题描述】:

我在数据库查询方面没有经验,但我正在尝试从 MySQL 获取这些数据:

$query->select(array($db->quoteName('userid')));
$query->select(' DATEDIFF(expires, now()) as dayleft');
$query->from($db->quoteName('product_order_status'));
$query->where($db->quoteName('userid') . ' LIKE '. $userID);
$query->where($db->quoteName('active') . ' LIKE '. '1');
$query->from($db->quoteName('product_orders'));
$query->where($db->quoteName('processor') . ' LIKE '. 'paypal');

我想要得到的是-

  1. 来自 product_order_status

    • 获取日期范围 - 工作
    • 获取当前用户的“活动”字段值为“1”的订单 - 工作中
  2. 来自 product_orders

    • 从值为“paypal”的“process”字段获取付款流程。 - 当我添加此查询时,它不起作用并显示错误:1052 字段列表中的列 'userid' 不明确

如何正确进行此查询,以便获得 PayPal 为当前登录用户处理的活动订单?

【问题讨论】:

  • 此错误表示查询中使用了多个表,但您要求的列存在于多个表中。所以你需要像这样指定哪个表:SELECT sample1.userid FROM sample1 LEFT JOIN sample2 ON sample1.id = sample2.id
  • 你能根据上面的查询写出完整的代码吗?感谢您的帮助!

标签: php mysql


【解决方案1】:

我不熟悉您用来生成这些查询的 PHP 库,但您的答案可能如下所示:

$query->select(array($db->quoteName('product_order_status.userid')));
$query->select(' DATEDIFF(expires, now()) as dayleft');
$query->from($db->quoteName('product_order_status'));
$query->where($db->quoteName('product_order_status.userid') . ' LIKE "'. $userID . '"');
$query->where($db->quoteName('active') . ' LIKE '. '1');
$query->from($db->quoteName('product_orders'));
$query->where($db->quoteName('processor') . ' LIKE '. '"paypal"');

或者可能是这样的:

$query->select(array('`product_order_status`.`userid`'));
$query->select(' DATEDIFF(expires, now()) as dayleft');
$query->from($db->quoteName('product_order_status'));
$query->where('`product_order_status`.`userid`' . ' LIKE "'. $userID . '"');
$query->where($db->quoteName('active') . ' LIKE '. '1');
$query->from($db->quoteName('product_orders'));
$query->where($db->quoteName('processor') . ' LIKE '. '"paypal"');

【讨论】:

  • 第二个假设 $db->quoteName() 只是为了在你给它的字符串的每一侧添加反引号字符 (`)。
  • @sifur 这回答了你的问题吗?
  • 我正在使用 PHP 7,它现在​​显示此错误-1054 Unknown column 'paypal' in 'where clause'
  • 你的字符串 "paypal" 没有被转义,所以 MySQL 认为它是一个表名。我已经更新了我的答案以反映这一点
  • 太棒了,哪一个代码块适合你? (所以未来的谷歌人不会感到困惑)
猜你喜欢
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2018-11-10
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多