Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка по полю в котором найдено ключевое слов, при поиские в нескольких полях text 
:(
    Опции темы
Maksym
  Дата 27.3.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



Вот такой простой запрос:
Код

SELECT field3 FROM table1 WHERE (field1 LIKE %keyword%) OR (field2 LIKE %keyword%) ORDER BY field4

Необходимо чтобы в результирующей выборке сначала шли записи, в которых keyword обнаружился в field1, а после них записи для которых keyword попал в field2.
Как бы это сделать? smile
PM MAIL   Вверх
LSD
Дата 27.3.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Через uninon:
Код
(SELECT field3 FROM table1 WHERE field1 LIKE %keyword% ORDER BY field4)
union
(SELECT field3 FROM table1 WHERE field2 LIKE %keyword% ORDER BY field4)



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Maksym
Дата 27.3.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



LSD
Спасибо smile
А если какая нибудь запись будет удовлетворять обоим SELECTам - он вадь попадет в выборку дважды? или я ошибаюсь..
PM MAIL   Вверх
LSD
Дата 27.3.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Да. В принципе можно включить туда дополнительное условие not (like...), но это не здорово с точки зрения производительности.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ТоляМБА
Дата 27.3.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 5
Всего: 252



Если я не ошибаюсь, то в MS SQL Server 2000:
так попадут по одной записи на разные условия (если запись есть и по 1-му и по 2-му условию)
Код

Select *
from table1
where ...
union
Select *
from table1
where ...

а так попадут все записи с поторяющимися значениями по обоим условиям
Код

Select *
from table1
where ...
union ALL
Select *
from table1
where ...


(развница в запросах в слове ALL)

Это сообщение отредактировал(а) ТоляМБА - 27.3.2006, 11:51
PM   Вверх
Maksym
Дата 27.3.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



Работаю в postgresql
PM MAIL   Вверх
LSD
Дата 27.3.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Попробуй union distinct.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Maksym
Дата 6.4.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



SELECTы успешно выполняются, с помощью UNIONа объединяются, но итоговый набор данных перемешался все равно, отсортирован по первичному ключу, если не указано иное. smile
PM MAIL   Вверх
Maksym
Дата 6.4.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



Да, почитал документацию, на результат UNION накладывается общая сортировка. Получить результаты заросов последовательно - не получается.
PM MAIL   Вверх
chief39
Дата 6.4.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(LSD @ 27.3.2006, 13:26 Найти цитируемый пост)
Попробуй union distinct.

Стоп... насколько знаю, distinct только для селекта, поскольку по умолчанию он гребёт всё.
А юнион дублирующиеся строки выбрасывает(дефолт). Ему насильно нао указывать ALL
Из-за этого стандарт SQL и попинывали.



Maksym, попробуй сиё:

Код


-- тестовая табличка
create table ttt(
    i integer,
    v varchar(50)
);

-- тестовые данные

insert into ttt(i,v) values(1,'t');
insert into ttt(i,v) values(2,'s');
insert into ttt(i,v) values(3,'a');
insert into ttt(i,v) values(4,'z');


-- убеждаемся что они есть
select * from ttt

-- собссно дабл селект с юнионом
-- выбрало пять строк(двойка попадает и в тот и тот запрос, all запрещает показать эти две записи как одну, сортирует по второму столбцу весь датасет)
select i,v
from ttt
where i>1
union all
select i,v
from ttt
where i<3
order by 2


-- то же самое, но без all двойка один раз попалась - четыре записи в результате на выводе
select i,v
from ttt
where i>1
union
select i,v
from ttt
where i<3
order by 2



Только что прогнал на оракле. Имхо - везде должно отработать - самый что ни на есть стд. скл. smile
Добавлено @ 16:06
Аааа... пардон, зачитался комментами - вопрос проглядел... smile стандартом Union так не сделаешь, делай так:

Код

select i,v,1
from ttt
where i>1
union
select i,v,2
from ttt
where i<3
order by 3 asc, 2 asc



Дополнительная колонка - для разделения записей по резалтсетам - в итоге её просто не отображай(не используй) ;)


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Maksym
Дата 13.4.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



chief39
не пойму чтото... ввести дополнительную колонку?..

PM MAIL   Вверх
batigoal
Дата 13.4.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Maksym @ 13.4.2006, 13:27 Найти цитируемый пост)
не пойму чтото... ввести дополнительную колонку?..

Да, но не в таблице, а в результате запроса. При обработке этого результата - игнорировать.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
chief39
Дата 13.4.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(Maksym @ 13.4.2006, 12:27 Найти цитируемый пост)
не пойму чтото... ввести дополнительную колонку?..

Это колонка времени запроса, а значения - константы. Ты можешь указывать конкретные поля из селектируемых таблиц или константы. В случае констант - они равны для любой строчки резалтсета. То есть
Код

select x, 1
from name_tab

даст
Код

Вася,    1
Петя,    1
Игорь,  1

В твоём случае - это пока единственное и совсем несложное решение твоего вопроса smile Уже готовое ;)




--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Maksym
Дата 18.4.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



chief39
Ну так проблема одинаковых записей не решается...  За счет дополнительной виртуальной колонки строки с одинаковыми значениями теряют свою уникальность и UNION их не ообъединяет в одну... 
PM MAIL   Вверх
chief39
Дата 18.4.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(Maksym @  18.4.2006,  14:35 Найти цитируемый пост)
chief39
Ну так проблема одинаковых записей не решается...  За счет дополнительной виртуальной колонки строки с одинаковыми значениями теряют свою уникальность и UNION их не ообъединяет в одну...  

Дык... тогда во втором запросе сделай подзапрос not in (первый запрос)
Выберет первый. Потом второй, исключая записи, которые УЖЕ были в первом.
Так будет помедленнее но.. под все твои требования вроде подгоняется ;) 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0941 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.