我创建了一个函数,它生成一个复杂的查询,为我的搜索引擎计算点数。它得到了正确的结果,但我不能限制输出行..。下面是为一个2字搜索("lorem“)生成的查询:
SELECT SQL_CALC_FOUND_ROWS
`Search`.`model` AS `model`,
`Search`.`foreign_key` AS `id`,
SUM(`Search`.`points`) AS `points`
FROM (
SELECT
`i18n`.`foreign_key`, `i18n`.`model`,
(CASE
WHEN `i18n`.`field` = "name" THEN 50
WHEN `i18n`.`field` = "s_desc" THEN 20
END) AS `points`
FROM
`i18n`
WHERE
`i18n`.`field` IN ("name", "s_desc") AND
`i18n`.`locale` = "en-us" AND
(`i18n`.`content` LIKE "lorem%" OR `i18n`.`content` LIKE "% lorem%")
UNION ALL
SELECT
`tagged`.`foreign_key`, `tagged`.`model`,
"50" as `points`
FROM
`tagged`
INNER JOIN
`tags` ON
`tags`.`id` = `tagged`.`tag_id` AND
`tags`.`name` = "lorem"
WHERE
`tagged`.`language` = "en-us"
UNION ALL
SELECT
`i18n`.`foreign_key`, `i18n`.`model`,
(CASE
WHEN `i18n`.`field` = "name" THEN 50
WHEN `i18n`.`field` = "s_desc" THEN 20
END) AS `points`
FROM
`i18n`
WHERE
`i18n`.`field` IN ("name", "s_desc") AND
`i18n`.`locale` = "en-us" AND
(`i18n`.`content` LIKE "ipsum%" OR `i18n`.`content` LIKE "% ipsum%")
UNION ALL
SELECT
`tagged`.`foreign_key`, `tagged`.`model`,
"50" as `points`
FROM
`tagged`
INNER JOIN
`tags` ON
`tags`.`id` = `tagged`.`tag_id` AND
`tags`.`name` = "ipsum"
WHERE
`tagged`.`language` = "en-us"
) `Search`
GROUP BY
`Search`.`model`,
`Search`.`foreign_key`
ORDER BY
`points` DESC;
LIMIT 5 OFFSET 0请注意,我还尝试了LIMIT 5, 0,并且只尝试了LIMIT 5。它会返回所有的点击率,而不仅仅是前5。我做错了什么?
发布于 2014-12-19 12:25:04
现在一切都正常了,问题在于ORDER语句中的ORDER。
ORDER BY
`points` DESC
LIMIT 5 OFFSET 0https://stackoverflow.com/questions/27548848
复制相似问题