У меня есть запрос, как это:Почему внешний порядок работает неправильно?
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
Но Я не знаю, почему результат не совпадает с первым запросом. Зачем? И как я могу это исправить?
Edit: Вот некоторые примеры:
// 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». Итак, ряды будут разными. Возможно, вам следует объяснить, что вы пытаетесь сделать. –
ok Я хочу это: фокус первого запроса: fist 'select', а второй' select' возвращает несколько повторяющихся строк. Теперь я хочу предотвратить это (в этом случае 'UNION DISTINCT' работает как' UNION ALL'). Также я думаю, что я могу написать один 'select' вместо двух первых' select' (потому что имя таблицы идентично). Полностью моя цель - сортировка. Я хочу показать результат первого 'select' в верхней части результатов. – stack
Я предпочел бы видеть исходный источник данных и ожидаемый набор результатов вместо всех этих странных запросов :-) – Alex