bestsource

다른 값이 비어 있거나 없는 경우 SQL 쿼리가 한 값을 표시하도록 하려면 어떻게 해야 합니까?

bestsource 2023. 10. 16. 21:57
반응형

다른 값이 비어 있거나 없는 경우 SQL 쿼리가 한 값을 표시하도록 하려면 어떻게 해야 합니까?

현재 쿼리가 있는데 실행할 때 오류가 발생합니다. 오류는 이 부분에 있습니다.

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']part는 잘 작동하며 숫자 값입니다.

오류는 다음과 같습니다.

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

제가 지금 가지고 있는 문제는 제가 어떤 것을 게시할 때 그것은 효과가 있지만, 제가 게시물에 반응할 때 그것은 항상 그 값을 가져간다는 것입니다.

그래서 이제 데이터베이스에 마지막으로 삽입된 것을 확인해야 하는데, 저는 그와 비슷한 작업을 해야 할 것 같습니다.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;

하지만 이것이 당신이 원하는 정확한 논리인지 잘 모르겠습니다. 왜냐하면 그것은 잘 설명되지 않기 때문입니다.

언급URL : https://stackoverflow.com/questions/35114344/how-can-i-get-a-sql-query-to-show-one-value-if-another-value-is-empty-not-existe

반응형