imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 15.10.2008, 23:50     # 1
tod
Junior Member
 
Регистрация: 14.02.2005
Сообщения: 118

tod Известность не заставит себя ждатьtod Известность не заставит себя ждать
Как правильно задать запрос к мускулу

Есть база данных: с полем, которое имеет значения:
ответ11111
ответ11112
ответ11113
ответ11114

ответ11116
ответ11117
ответ11118
ответ11119

Задаю запрос по поиску поля *ответ11115* (которого к примеру, нет в базе)
Мне нужно, чтоб мускул показал мне 2 поля сверху по списку и 2 поля снизу по списку, как бы альтернативу отсуствующему:
ответ11113
ответ11114

ответ11116
ответ11117


Само поле не цифровое, а смешаное..

Может немного сумбурно, но примерно так

какой запрос рациональней всего сделать, чтоб как можно меньше напрягать базу...
tod вне форума  
Старый 16.10.2008, 11:55     # 2
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Сомнительно что такое одним запросом возможно оформить.
EvroStandart вне форума  
Старый 16.10.2008, 14:20     # 3
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
можно попробовать что-то типа

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.
BorLase вне форума  
Старый 16.10.2008, 15:18     # 4
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от tod Посмотреть сообщение
Само поле не цифровое, а смешаное..
Это как? Тип поля какой?


Цитата:
Сообщение от tod Посмотреть сообщение
Мне нужно, чтоб мускул показал мне 2 поля сверху по списку и 2 поля снизу по списку, как бы альтернативу отсуствующему:
Как алттернативу, это значит их не надо выбирать, если точное соответствие найдено? Или всегда надо +/- 2?

Если я правильно понял, и первое, то можно так:
Код:
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.
Hubbitus вне форума  
Старый 16.10.2008, 16:07     # 5
tod
Junior Member
 
Регистрация: 14.02.2005
Сообщения: 118

tod Известность не заставит себя ждатьtod Известность не заставит себя ждать
суть в том, что если этот запрос идёт, то по условию ответа точно нет...

Как альтернатива - может быть и +\- 1 - не суть важно

Я немного ввёл вас в заблуждение всех неправильно поставленой задачей..

Второй пример поля из этой же задачи.
Ищем запросом поле - .автопром


есть поля:
.авто
.автопроизводитель

.автомобилестроение
.автомобиль


его нет в базе - это уже известно точно, мне нужно, чтоб запрос выдал:
.автопроизводитель

.автомобилестроение

Которые должны были бы стоять в списке до и после слова: .автопром - если бы оно там было..
Вот тут думаю я пояснил правильно...

Последний раз редактировалось tod; 16.10.2008 в 16:16.
tod вне форума  
Старый 16.10.2008, 16:13     # 6
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от tod Посмотреть сообщение
суть в том, что если этот запрос идёт, то по условию ответа точно нет...
Так это еще выяснить же надо, я так понял это надо сразу сделать.
В моем запросе именно так - либо тот что соответствует, либо возвращается 4 вокруг.


Цитата:
Сообщение от tod Посмотреть сообщение
Как альтернатива - может быть и +\- 1 - не суть важно
Безусловно не важно. Для этого просто <=2 надо поменять в запросе на <=1 и все.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 16.10.2008, 18:54     # 7
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
а если поля в базе отсортированы по алфавиту, не проще сделать
Код:
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
Saruman вне форума  
Старый 16.10.2008, 19:24     # 8
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от Saruman Посмотреть сообщение
а если поля в базе отсортированы по алфавиту
Гыг, так какая разница как поля отсортированы в таблице, если порядок сортировки Вы все равно задаете явно в запросе в виде ORDER BY?

Ну а так, да, в свете новой постановки задачи, мой подзапрос перепишется на UNION приблизительно тех, что указал
Saruman. Собственно и в первом случае так можно было, просто я хотел одним запросом все...

P.S. Не хорошо новую постановку задачи дописывать уже после ответа поста
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 16.10.2008, 21:58     # 9
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
Гыг, так какая разница как поля отсортированы в таблице, если порядок сортировки Вы все равно задаете явно в запросе в виде ORDER BY?
согласен, криво сформулировал. Имелось в виду, если поля, соседние с нужным полем - т.е. те, что нам нужны - суть соседние при алфавитной сортировке. Мало ли там по какому ещё принципу может быть отсортировано всё это дело.
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
P.S. Не хорошо новую постановку задачи дописывать уже после ответа поста
ну надо же объяснить человеку, что он хочет
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 16.10.2008, 23:49     # 10
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от Saruman Посмотреть сообщение
Имелось в виду, если поля, соседние с нужным полем - т.е. те, что нам нужны - суть соседние при алфавитной сортировке.
Трижды перечитал, пока понял что ты сказать хотел
В общем разумеется, если подразумевается не алфавитная сортировка (но не похоже чобы это тот случай, особенно в свете примера), то нужно будет вписать корректное условие в ORDER BY, а не просто имя поля для сортировки.


Цитата:
Сообщение от Saruman Посмотреть сообщение
ну надо же объяснить человеку, что он хочет
Не, я к тому что когда уже ответил на пост, оказалось что тот на который я отвечал изменили. Получилось я отвечал не совсем на то что написано, ну не совсем по теме уже как бы я написал
Ладно, не думаю что это было специальо сделано, проехали.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 03:13.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.