作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前有一个查询,当我运行它时它给我一个错误,错误在这部分:
CASE ISNULL(po.u_id, "") WHEN "" THEN th.u_id ELSE po.u_id END AS idFix
整个查询:
SELECT *, count(th.t_id) AS threadCount, count(po.p_id) as postCount, CASE ISNULL(po.u_id, "") WHEN "" THEN th.u_id ELSE po.u_id END AS idFix, CASE WHEN th.postdate > IFNULL(po.postdate, "0000-01-01 00:00:00") THEN max(th.postdate) ELSE max(po.postdate) END AS lastdate FROM thread th LEFT OUTER JOIN threadpost po ON th.t_id = po.t_id WHERE th.sc_id =' . $fetch['sc_id'] . ' AND th.archived = 0
$fetch['sc_id']
部分工作正常并且是一个数值。
我得到的错误是:
Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'ISNULL' in C:\xampp\htdocs\goatbb\pages\home.php:39 Stack trace: #0 C:\xampp\htdocs\goatbb\pages\home.php(39): PDO->query('SELECT *, count...') #1 C:\xampp\htdocs\goatbb\index.php(72): include('C:\\xampp\\htdocs...')
我想要的是当我执行此查询时 idFix
返回最后发布的用户 ID,所以与 lastdate
相同的原则,查询的那部分工作很好,但现在它还需要使用用户 ID 而不是日期。
我已经在 SO 上进行了搜索,但出于某种原因,当我尝试这些问题的解决方案时,它对我不起作用。
我稍微编辑了查询,将不工作的部分更改为:
CASE WHEN IFNULL(po.u_id, 0) THEN po.u_id ELSE th.u_id END AS idFix
我现在遇到的问题是,当我发布一些东西时它有效,但当我对帖子使用react时它总是采用该值。
所以现在我需要检查数据库中最后插入的内容,我想我必须做一些与 lastdate
部分类似的事情,但我不确定该怎么做。
最佳答案
您的查询有很多问题。您正在进行聚合,然后使用 SELECT *
。这是非常糟糕的做法,而且基本上没有意义,因为您的查询只返回一行(并且可能有多行)。
此外,前两个计数很可能返回相同的值。我猜你想要 COUNT(DISTINCT)
。
根据您的描述,我希望查询看起来更像这个简单的聚合:
SELECT COUNT(DISTINCT th.t_id) AS threadCount,
COUNT(DISTINCT po.p_id) as postCount,
MAX(GREATEST(po.u_id, th.u_id)) as idFix,
MAX(po.postdate) lastdate
FROM thread th LEFT OUTER JOIN
threadpost po
ON th.t_id = po.t_i
WHERE th.sc_id =' . $fetch['sc_id'] . ' AND th.archived = 0;
但是,我不确定这是否正是您想要的逻辑,因为没有得到很好的解释。
关于php - 如果另一个值是空的/不存在,如何让 SQL 查询显示一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114344/
我是一名优秀的程序员,十分优秀!