【发布时间】:2013-11-27 22:58:45
【问题描述】:
我有一个这种格式的表格:
Name | Description | option_id
"Apple" | "Sweet fruit" | 3
"Apple" | "Sour fruit" | 4
"Pear" | "Sweet fruit" | 5
"Orange" | "Orange fruit" | 3
"Carrot" | "Vegetable" | 3
我运行查询SELECT * FROM table WHERE Description LIKE '%fruit%' 并得到这个:
Name | Description | option_id
"Apple" | "Sweet fruit" | 3
"Apple" | "Sour fruit" | 4
"Pear" | "Sweet fruit" | 5
"Orange" | "Orange fruit" | 3
我只想得到 2 个不同的水果名称,所以查询的结果应该是:
Name | Description | option_id
"Apple" | "Sweet fruit" | 3
"Apple" | "Sour fruit" | 4
"Orange" | "Orange fruit" | 3
但我显然没有得到 3 条记录,因为使用 ORDER BY Name ASC LIMIT 2 会导致在准备好 2 条记录时停止查询。
我想生成尽可能多的记录,只要它们的名称位于不同的前 10 个中。 到目前为止,这是我想出的:
SELECT * FROM table WHERE Name IN (
SELECT DISTINCT Name ORDER BY Name ASC LIMIT 2
) ORDER by option_id ASC
有没有更好的方法来做到这一点而不嵌套?查询应该尽可能快。
P.S. 更复杂的是,这不是我的完整查询,而只是其中的一部分。完整的看起来像这样(没有LIMIT):
SELECT table.*,
MATCH (Name, Description) AGAINST ('fruit') AS relevance,
MATCH (Name) AGAINST ('fruit') AS name_relevance
FROM table
WHERE MATCH (Name, Description) AGAINST ('fruit')
GROUP BY Name
ORDER BY name_relevance DESC, relevance DESC, Name ASC
And I Name 不仅仅是一个名字,还有一些关于它的信息,比如“新鲜青苹果”、“苹果果实”等。
【问题讨论】:
-
为什么是“Orange”而不是“Pear”?
-
@GoatCO 对不起.. 我在发布之前删除了一些代码。现在应该更有意义了。
标签: php mysql sql performance