2013-04-16 2 views
0
SELECT * 
    FROM address 
    WHERE name LIKE 'a%' OR name LIKE '% a%' LIMIT 10 

Этот запрос извлекает name S, которые начинаются с a либо в начале 'a%'
или в слове в средней '% a%'. Как получить результаты от LIKE 'a%' сначала
, затем LIKE '% a%'?.двух одинаковых условиях, но извлечение из одного первого затем другой

ответ

3

добавить ORDER BY пункт,

SELECT * 
FROM address 
WHERE name LIKE 'a%' OR name LIKE '% a%' 
ORDER BY CASE WHEN name LIKE 'a%' THEN 0 ELSE 1 END 
LIMIT 10 
+1

@zerkms спасибо за обновление, многое приложение reciated ': D' –

+0

@ spencer7593 yes right': D' Я скопировал неправильное состояние, плохо. Я просто удалю его, чтобы избежать путаницы. –

0

Здесь:

SELECT t1.* 
FROM (
    SELECT * 
    FROM address 
    WHERE name LIKE 'a%' 
    LIMIT 10 
) t1 
WHERE t1.name LIKE '% a%' 
0

Один подход заключается в добавлении ОКВЕК ВУ к вашему запросу:

ORDER BY IF(name LIKE 'a%',1,2) 

Something например:

SELECT * 
    FROM address 
WHERE name LIKE 'a%' OR name LIKE '% a%' 
ORDER BY IF(name LIKE 'a%',1,2) 
LIMIT 10 

Для того, чтобы избежать "Использование FileSort" операции на больших наборов (т.е. МНОГО строк в адресе), и если вы хотите, чтобы вернуть 10 строк, более сложный ищет запрос, скорее всего, работать лучше, путем ограничения числа строк, которые будут отсортированы:

SELECT c.* 
    FROM (SELECT a.* 
      FROM (
        SELECT * 
        FROM address 
        WHERE name LIKE 'a%' 
        LIMIT 10 
       ) a 
      UNION ALL 
     SELECT b.* 
      FROM address b 
      WHERE b.name LIKE '% a%' AND b.name NOT LIKE 'a%' 
      LIMIT 10 
     ) c 
ORDER BY c.name LIKE 'a%' DESC 
LIMIT 10 
0

Объединение запросов может быть в заказать здесь. Для документации по MySQL

Чтобы заставить строки в результате UNION состоять из наборов строк, полученных каждым SELECT один за другим, выберите дополнительный столбец в каждом SELECT, который будет использоваться в качестве столбца сортировки, и добавьте ORDER BY, следуя последний SELECT:

(SELECT 1 AS sort_col, col1a, col1b, ... FROM t1) 
UNION 
(SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col; 

Так что для вашего дела что-то вроде

(Select *, 1 as sortcol from addresses where name like 'a%') 
Union 
(Select *, 2 as sortcol from addresses where name like '% a%') 
Order by sortcol 

Ссылка: http://dev.mysql.com/doc/refman/5.0/en/union.html

Смежные вопросы