1

我对以下查询有疑问。对于返回总结果总和的子查询,我收到错误Unknown column 'search.term' in 'where clause',我不确定如何正确执行此查询?任何帮助表示赞赏。

SELECT *,
  (SELECT SUM(totalResults)
   FROM (SELECT COUNT(*) as totalResults
         FROM media
         LEFT JOIN users ON users.id = media.userId
         WHERE media.title LIKE CONCAT('%', search.term, '%')
       OR media.description LIKE CONCAT('%', search.term, '%')
       OR media.tags LIKE CONCAT('%', search.term, '%')
       OR users.username LIKE search.term
         UNION ALL
         SELECT COUNT(*)
         FROM reposts
         LEFT JOIN media ON media.id = reposts.mediaId
         LEFT JOIN users ON users.id = reposts.userId
         WHERE media.title LIKE CONCAT('%', search.term, '%')
       OR media.description LIKE CONCAT('%', search.term, '%')
       OR media.tags LIKE CONCAT('%', search.term, '%')
       OR users.username LIKE search.term
         )
  t) AS totalResults,
  MAX(search.timestamp) AS searchTimestamp
  FROM search
  WHERE userId = '1'
  GROUP BY search.term
  ORDER BY searchTimestamp DESC
4

1 回答 1

2

原因是双重嵌套的SELECT子查询。尝试这个:

 SELECT  term,
         ( SELECT COUNT(*)
           FROM media
           LEFT JOIN users ON users.id = media.userId
           WHERE media.title LIKE CONCAT('%', search.term, '%') 
              OR media.description LIKE CONCAT('%', search.term, '%') 
              OR media.tags LIKE CONCAT('%', search.term, '%') 
              OR users.username LIKE search.term
         )
         +
         ( SELECT COUNT(*)
           FROM reposts
           LEFT JOIN media ON media.id = reposts.mediaId
           LEFT JOIN users ON users.id = reposts.userId
           WHERE media.title LIKE CONCAT('%', search.term, '%') 
              OR media.description LIKE CONCAT('%', search.term, '%') 
              OR media.tags LIKE CONCAT('%', search.term, '%') 
              OR users.username LIKE search.term
         ) AS totalResults,
         MAX(timestamp) AS searchTimestamp
FROM search
WHERE userId = '1'
GROUP BY term
ORDER BY searchTimestamp DESC ;

旁注:使用SELECT *while haveGROUP BY <columns>将在所有其他列中为您提供不确定的结果,除了<columns>. MySQL 允许这种定义不明确的行为,但这不是一个好的做法。

于 2013-09-10T12:11:49.183 回答