Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.05.2006, 23:36
cosmo вне форума Посмотреть профиль Отправить личное сообщение для cosmo Найти все сообщения от cosmo
  № 11  
Ответить с цитированием
cosmo

Регистрация: Mar 2001
Адрес: Екатеринбург
Сообщений: 286
Отправить сообщение для cosmo с помощью ICQ
Ок. Я примерно так и думал, а допустим если вместо articles.text будет articles.article, то тогда можно сделать будет?

P.S Я понимаю что достал уже глупыми вопросами, но я только начинаю сложные запросы к БД изучать, раньше все обходилось линейностью

Старый 23.05.2006, 12:49
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 12  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
Можно будет, если все данные в одну таблицу сложить, а отношение к articles или чему-то еще флагом определять.
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.

Старый 23.05.2006, 14:25
styx вне форума Посмотреть профиль Отправить личное сообщение для styx Найти все сообщения от styx
  № 13  
Ответить с цитированием
styx

Регистрация: Apr 2003
Сообщений: 243
Работает - смотря в каком, правда.
Help говорит: UNION is implemented in MySQL 4.0.0

Старый 02.06.2006, 19:11
thorr вне форума Посмотреть профиль Отправить личное сообщение для thorr Найти все сообщения от thorr
  № 14  
Ответить с цитированием
thorr

Регистрация: Dec 2001
Адрес: Moscow
Сообщений: 23
во-первых, имя столбца (в pages.text) не может быть зарезервированным словом (в данном случае "text").
во-вторых, если таблицы не связаны, делай 2 запроса к каждой таблице. непонятно, зачем все в один запрос пихать.
в третьих, если ищешь в ячейках типа text, то лучше делать полнотекстовый поиск. назначаешь индекс этому столбцу типа fulltext и делаешь запрос типа:
SELECT id, name, description, MATCH(intro) AGAINST "поисковая строка" AS relev FROM pages WHERE MATCH(intro) AGAINST "поисковая строка" OR intro LIKE '%поисковая строка%' ORDER BY relev DESC"; где intro - это текстовый столбец (т.е. тип TEXT) с индексом типа FULLTEXT


Последний раз редактировалось thorr; 02.06.2006 в 19:14.
Старый 02.06.2006, 19:56
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 15  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
Цитата:
Сообщение от thorr
во-первых, имя столбца (в pages.text) не может быть зарезервированным словом (в данном случае "text").
запросто
CREATE TABLE `text` (`text` INT);
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.

Старый 06.06.2006, 16:40
Constantine вне форума Посмотреть профиль Отправить личное сообщение для Constantine Посетить домашнюю страницу Constantine Найти все сообщения от Constantine
  № 16  
Ответить с цитированием
Constantine
 
Аватар для Constantine

Регистрация: Jun 2000
Адрес: $_SERVER['REMOTE_ADDR']
Сообщений: 854
Цитата:
Сообщение от thorr
...во-вторых, если таблицы не связаны, делай 2 запроса к каждой таблице. непонятно, зачем все в один запрос пихать...
А очень даже понятно: речь идет о поиске, когда, например, искать надо по страницам, новостям и статьям, которые благополучно тусуются в разных таблицах, и чтобы тем же полнотекстовым поиском отсортировать их по релевантности...
Для примера:
Код:
$query_search = "(SELECT id, header, DATE_FORMAT(lastedit,'%Y-%m-%d') AS edate, 0 AS cat, MATCH (header, content) AGAINST ('".$fullstring."') AS relev, 1 AS subj FROM ".DB_PREFIX."pages  WHERE  header LIKE '%".$searchwords[0]."%' OR content LIKE '%".$searchwords[0]."%'";
if (count($searchwords)>1&&$searchwords[1]!="") $query_search.=" ".$method." header LIKE '%".$searchwords[1]."%' OR content LIKE '%".$searchwords[1]."%'";
if (count($searchwords)>2&&$searchwords[2]!="") $query_search.=" ".$method." header LIKE '%".$searchwords[2]."%' OR  content LIKE '%".$searchwords[2]."%'";
$query_search.=" AND view = 1) ";
$query_search.="UNION (SELECT id, header, newsdate, 0, MATCH (header, content) AGAINST ('".$fullstring."') AS relev, 2 AS subj FROM ".DB_PREFIX."news  WHERE  header LIKE '%".$searchwords[0]."%' OR content LIKE '%".$searchwords[0]."%'";
if (count($searchwords)>1&&$searchwords[1]!="") $query_search.=" ".$method." header LIKE '%".$searchwords[1]."%' OR  content LIKE '%".$searchwords[1]."%'";
if (count($searchwords)>2&&$searchwords[2]!="") $query_search.=" ".$method." header LIKE '%".$searchwords[2]."%' OR  content LIKE '%".$searchwords[2]."%'";
$query_search.=" AND view = 1) ";
$query_search.="UNION (SELECT id, header, adate, catid, MATCH (header, content) AGAINST ('".$fullstring."') AS relev, 3 AS subj FROM ".DB_PREFIX."article  WHERE  header LIKE '%".$searchwords[0]."%' OR content LIKE '%".$searchwords[0]."%'";
if (count($searchwords)>1&&$searchwords[1]!="") $query_search.=" ".$method." header LIKE '%".$searchwords[1]."%' OR  content LIKE '%".$searchwords[1]."%'";
if (count($searchwords)>2&&$searchwords[2]!="") $query_search.=" ".$method." header LIKE '%".$searchwords[2]."%' OR  content LIKE '%".$searchwords[2]."%'";
$query_search.=" AND view = 1) ORDER BY relev DESC LIMIT 0, 30";
Не знаю на сколько это эффективно, но работает хорошо
__________________
X


Последний раз редактировалось Constantine; 06.06.2006 в 16:57.
Создать новую тему Ответ Часовой пояс GMT +4, время: 13:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.