在Laravel中抛出错误而不是在PHPMyAdmin中

时间:2017-03-27 14:27:26

标签: mysql laravel-5 having

下面的代码(代码1,没有Laravel特定代码)在PHPMyAdmin&#34; SQL-question部分&#34;中完美无缺,但是当我在Laravel安装中将其作为RAW运行时,我收到以下错误:< / p>

SQLSTATE[42000]: Syntax error or access violation: 1463 Non-grouping field 'ip' is used in HAVING clause (SQL: SELECT
d.id,
d.domain,
d.date_expiration,
d.date_added,
MAX(CASE WHEN (dm.meta_key = 'domain') THEN dm.meta_value ELSE NULL END) AS domain,
MAX(CASE WHEN (dm.meta_key = 'ip') THEN dm.meta_value ELSE NULL END) AS ip,
MAX(CASE WHEN (dm.meta_key = 'link') THEN dm.meta_value ELSE NULL END) AS link,
MAX(CASE WHEN (dm.meta_key = 'net') THEN dm.meta_value ELSE NULL END) AS net
FROM
domain d
INNER JOIN domain_meta dm
ON d.id = dm.domain_id
WHERE 
d.date_expiration >= '2017-03-21'
GROUP BY d.id, d.domain, d.date_expiration, d.date_added
HAVING ip > 4
ORDER BY d.date_expiration ASC
LIMIT 1000)

代码1

$domains = DB::select("SELECT
    d.id,
    d.domain,
    d.date_expiration,
    d.date_added,
    MAX(CASE WHEN (dm.meta_key = 'domain') THEN dm.meta_value ELSE NULL END) AS domain,
    MAX(CASE WHEN (dm.meta_key = 'ip') THEN dm.meta_value ELSE NULL END) AS ip,
    MAX(CASE WHEN (dm.meta_key = 'link') THEN dm.meta_value ELSE NULL END) AS link,
    MAX(CASE WHEN (dm.meta_key = 'net') THEN dm.meta_value ELSE NULL END) AS net
FROM
    domain d
INNER JOIN domain_meta dm
ON d.id = dm.domain_id
WHERE 
    d.date_expiration >= '2017-03-21'
GROUP BY d.id, d.domain, d.date_expiration, d.date_added
HAVING ip > 4
ORDER BY d.date_expiration ASC
LIMIT 1000");

我尝试在GROUP BY -row下添加 ip ,但收到错误Unknown column 'ip' in 'group statement。为什么它会在Laravel语法中引发错误?

1 个答案:

答案 0 :(得分:0)

尝试不要在子句

中使用别名
  $domains = DB::select("SELECT
      d.id,
      d.domain,
      d.date_expiration,
      d.date_added,
      MAX(CASE WHEN (dm.meta_key = 'domain') THEN dm.meta_value ELSE NULL END) AS domain,
      MAX(CASE WHEN (dm.meta_key = 'ip') THEN dm.meta_value ELSE NULL END) AS ip,
      MAX(CASE WHEN (dm.meta_key = 'link') THEN dm.meta_value ELSE NULL END) AS link,
      MAX(CASE WHEN (dm.meta_key = 'net') THEN dm.meta_value ELSE NULL END) AS net
  FROM
      domain d
  INNER JOIN domain_meta dm
  ON d.id = dm.domain_id
  WHERE 
      d.date_expiration >= '2017-03-21'
  GROUP BY d.id, d.domain, d.date_expiration, d.date_added
  HAVING MAX(CASE WHEN (dm.meta_key = 'ip') THEN dm.meta_value ELSE NULL END) > 4
  ORDER BY d.date_expiration ASC
  LIMIT 1000");