| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 14.02.2005
Сообщения: 118
![]() ![]() |
Как правильно задать запрос к мускулу
Есть база данных: с полем, которое имеет значения:
ответ11111 ответ11112 ответ11113 ответ11114 ответ11116 ответ11117 ответ11118 ответ11119 Задаю запрос по поиску поля *ответ11115* (которого к примеру, нет в базе) Мне нужно, чтоб мускул показал мне 2 поля сверху по списку и 2 поля снизу по списку, как бы альтернативу отсуствующему: ответ11113 ответ11114 ответ11116 ответ11117 Само поле не цифровое, а смешаное.. Может немного сумбурно, но примерно так ![]() какой запрос рациональней всего сделать, чтоб как можно меньше напрягать базу... |
|
|
|
|
# 3 |
|
::VIP::
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
можно попробовать что-то типа
select IFNULL(field, select field from table where field < 'ответ11115' order by field desc limit 2 union select field from table where field > 'ответ11115' order by field limit 2) from table where field = 'ответ11115' не могу поручиться за 100% работоспособность (БД под рукой нет, не могу попробовать) - но, по идее, должно сработать нечто типа этого
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people. |
|
|
|
|
# 4 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Это как? Тип поля какой?
Цитата:
Если я правильно понял, и первое, то можно так: Код:
SELECT *
FROM imho_ans i2
WHERE Answr = 'ответ11115'
UNION ALL
SELECT *
FROM imho_ans i
WHERE
NOT EXISTS (
SELECT ID
FROM imho_ans i2
WHERE Answr = 'ответ11114'
)
AND ABS(RIGHT(Answr, 5) - RIGHT('ответ11115', 5)) <= 2
ORDER BY Answr
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
|
# 5 |
|
Junior Member
Регистрация: 14.02.2005
Сообщения: 118
![]() ![]() |
суть в том, что если этот запрос идёт, то по условию ответа точно нет...
Как альтернатива - может быть и +\- 1 - не суть важно Я немного ввёл вас в заблуждение всех неправильно поставленой задачей.. Второй пример поля из этой же задачи. Ищем запросом поле - .автопром есть поля: .авто .автопроизводитель .автомобилестроение .автомобиль его нет в базе - это уже известно точно, мне нужно, чтоб запрос выдал: .автопроизводитель .автомобилестроение Которые должны были бы стоять в списке до и после слова: .автопром - если бы оно там было.. Вот тут думаю я пояснил правильно... Последний раз редактировалось tod; 16.10.2008 в 16:16. |
|
|
|
|
# 6 |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Так это еще выяснить же надо, я так понял это надо сразу сделать.
В моем запросе именно так - либо тот что соответствует, либо возвращается 4 вокруг. Безусловно не важно. Для этого просто <=2 надо поменять в запросе на <=1 и все.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
# 7 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
а если поля в базе отсортированы по алфавиту, не проще сделать
Код:
SELECT * FROM items WHERE itemvalue < 'автомобиль' ORDER BY itemvalue DESC LIMIT 2; SELECT * FROM items WHERE itemvalue > 'автомобиль' ORDER BY itemvalue ASC LIMIT 2;
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
|
|
|
|
# 8 |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Гыг, так какая разница как поля отсортированы в таблице, если порядок сортировки Вы все равно задаете явно в запросе в виде ORDER BY?
Ну а так, да, в свете новой постановки задачи, мой подзапрос перепишется на UNION приблизительно тех, что указал Saruman. Собственно и в первом случае так можно было, просто я хотел одним запросом все... P.S. Не хорошо новую постановку задачи дописывать уже после ответа поста
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
# 9 | ||
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
||
|
|
|
|
# 10 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() В общем разумеется, если подразумевается не алфавитная сортировка (но не похоже чобы это тот случай, особенно в свете примера), то нужно будет вписать корректное условие в ORDER BY, а не просто имя поля для сортировки. Не, я к тому что когда уже ответил на пост, оказалось что тот на который я отвечал изменили. Получилось я отвечал не совсем на то что написано, ну не совсем по теме уже как бы я написал ![]() Ладно, не думаю что это было специальо сделано, проехали.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|