我有这样的查询:为什么外部顺序不能正确工作?
SELECT @rank := @rank + 3 `rank`, id, subject, name
FROM quran, (select @rank := -2) q
WHERE MATCH (subject, name) AGAINST ('anything') and aye IN ("10")
UNION DISTINCT
SELECT @rank1 := @rank1 + 3 `rank`, id, subject, name
FROM quran, (select @rank1 := -1) q
WHERE MATCH (subject, name) AGAINST ('anything')
UNION ALL
SELECT @rank2 := @rank2 + 3 `rank`, id, subject, byA
FROM hadith, (select @rank2 := 0) q
WHERE MATCH (subject) AGAINST ('anything')
ORDER BY rank LIMIT 0, 11
现在我优化我的查询和组合拖车第一SELECT
第一个,像这样:(因为它们具有相同的表名)
(SELECT @rank1 := @rank1 + 2 `rank`, id, subject, name
FROM quran, (select @rank1 := -1) q
WHERE MATCH (subject, name) AGAINST ('anything')
ORDER BY CASE WHEN aye IN ('10')
THEN 0
ELSE 1
END
)
UNION ALL
(SELECT @rank2 := @rank2 + 2 `rank`, id, subject, byA
FROM hadith, (select @rank2 := 0) q
WHERE MATCH (subject) AGAINST ('anything')
)
ORDER BY rank LIMIT 0, 11
但我不知道为什么这种结果与第一个查询不相同。为什么?我该如何解决它?
编辑:下面是一些例子:
// quran // hadith
+----+---------+--------+ +----+---------+-------+
| id | subject | name | | id | subject | byA |
+----+---------+--------+ +----+---------+-------+
| 1 | hello | jack | | 1 | blue | jack |
| 2 | blue | peter | | 2 | how | hello |
| 3 | jack | red | | 3 | jack | blue |
| 4 | back | blue | +----+---------+-------+
| 10 | jack | how |
+----+---------+--------+
现在,我想这输出:所以首要任务是$number
,然后subject
列,然后name
列,另外,两个表的结果是交替的。
$anything = 'jack', $number = 10
+----+---------+--------+
| id | subject | name |
+----+---------+--------+
| 10 | jack | how |
| 3 | jack | blue |
| 3 | jack | red |
| 1 | blue | jack |
| 1 | hello | jack |
+----+---------+--------+
这些查询看起来非常不同于我。在一种情况下,您正在递增“2”,另一个则是“3”。所以,队伍会有所不同。也许你应该解释你正在尝试做什么。 –
好的我想要这个:第一个查询的焦点:第一个查询的选择和第二个'select'返回一些重复的行,现在我想阻止这种情况(在这种情况下'UNION DISTINCT'像'UNION ALL'一样工作)。另外我想我可以写一个'select'而不是两个第一个'select'(因为表名是相同的)。完全我的目的是排序。我想在结果顶部显示第一个“select”的结果。 – stack
我宁愿看到原始的数据源和预期的结果集,而不是所有这些奇怪的查询:-) – Alex