SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.03.2010 18:33:02

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Заставить MySQL учитывать порядок слов в запросе

Ребята, всех приветствую!

Помогите окончательно разобраться в следующем вопросе:
Имеется таблица:


mysql> select * from words;
+---------+--------------+
| word_id | word         |
+---------+--------------+
|       6 | прямая       |
|       8 | скоба        |
|       1 | строительная |
+---------+--------------+
 
Запрос:

select word_id from words where word in ("прямая", "строительная", "скоба");
+---------+
| word_id |
+---------+
|       6 |
|       8 |
|       1 |
+---------+
 
Я уже спрашивал о подобном поведении MySQL здесь, есть ли какой-либо способ заставить MySQL выдать мне id слов в порядке, согласно следованию слов в моем запросе (т.е. 6,1,8)?

Отредактированно FiMko (21.03.2010 18:33:59)

Неактивен

 

#2 21.03.2010 18:40:04

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Заставить MySQL учитывать порядок слов в запросе

В моей больной голове вдруг родилось вот такое безобразие big_smile:


SELECT CONCAT_WS(',',
    (select word_id from words where word ="прямая"),
    (select word_id from words where word ="строительная"),
    (select word_id from words where word ="скоба")
);
+---------+
| word_id |
+---------+
|       6 |
|       1 |
|       8 |
+---------+
 

Неактивен

 

#3 21.03.2010 19:50:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Заставить MySQL учитывать порядок слов в запросе

FiMko написал:

есть ли какой-либо способ заставить MySQL выдать мне id слов в порядке, согласно следованию слов в моем запросе (т.е. 6,1,8)?

Явно указать порядок сортировки.
Например:

SELECT word_id, IF(word ='прямая', 1, IF(word='строительная', 2, 3)) AS ord FROM words WHERE word IN ("прямая", "строительная", "скоба") ORDER BY ord;

или
SELECT word_id FROM words JOIN (SELECT 'прямая' AS word, 1 AS ord UNION SELECT 'строительная', 2 UNION SELECT 'скоба', 3 ) AS t USING(word) ORDER BY ord;

Если не считать безобразий из N-го количества запросовwink

Неактивен

 

#4 21.03.2010 19:55:02

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Заставить MySQL учитывать порядок слов в запросе

vasya написал:

FiMko написал:

есть ли какой-либо способ заставить MySQL выдать мне id слов в порядке, согласно следованию слов в моем запросе (т.е. 6,1,8)?

Явно указать порядок сортировки.
Например:

SELECT word_id, IF(word ='прямая', 1, IF(word='строительная', 2, 3)) AS ord FROM words WHERE word IN ("прямая", "строительная", "скоба") ORDER BY ord;

или
SELECT word_id FROM words JOIN (SELECT 'прямая' AS word, 1 AS ord UNION SELECT 'строительная', 2 UNION SELECT 'скоба', 3 ) AS t USING(word) ORDER BY ord;

Если не считать безобразий из N-го количества запросовwink

Большое спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson