Поиск строк, где text == varchar

Статус
В этой теме нельзя размещать новые ответы.

latteo

Эффективное использование PHP, MySQL
Регистрация
27 Фев 2008
Сообщения
1.603
Реакции
1.565
Есть база id (int) slovo(varchar(255)) predlozeniye (text)
Как составить запрос, чтобы отобразило только те строки, в который колонка predlozeniye содержит slovo из этой же строки?
 
PHP:
SELECT *
      FROM t1
      WHERE  `predlozeniye` LIKE CONCAT( '%', `slovo` , '%' )
 
Спасибо за быстрый ответ. Есть еще вопрос.
Можно ли сделать так чтобы отобразило только записи с уникальным значением predlozeniye (predlozeniye может неоднократно повторятся)?
 
PHP:
SELECT DISTINCT * 
      FROM t1 
      WHERE  `predlozeniye` LIKE CONCAT( '%', `slovo` , '%' )
 
PHP:
SELECT DISTINCT * 
      FROM t1 
      WHERE  `predlozeniye` LIKE CONCAT( '%', `slovo` , '%' )

Спасибо, за наводку только после DISTINCT в данном случае надо указать predlozeniye, иначе результат не изменится:
PHP:
SELECT DISTINCT predlozeniye 
      FROM t1 
      WHERE  `predlozeniye` LIKE CONCAT( '%', `slovo` , '%' )
 
А теперь небольшое усложнение задача та же:
Как составить запрос, чтобы отобразило только те строки, в который колонка predlozeniye содержит slovo
Вот только архитектура усложнилась:
1я таблица c именем sl:
id slovo
2я таблица с именем predl:
id sl_id predlozeniye date
где sl_id указывает на id строки содержащей slovo из первой таблице

sl_id - может повторятся
+ надо показать только те строки, где дата ближе всего к настоящей

Все мои попытки сделать выборку приводят к зависанию P4 :( Надеюсь на вашу помощь
 
Виртуальное объединение таблиц для выборки делается через LEFT JOIN (Можно в него поставить условие для объединения). Дата в timestamp?
если в двух разных таблицах одинаковые поля, то при составлении условия используешь `имя таблицы`.`поле`
 
ищем "слово" в таблице sl с интервалом даты в два дня от сегодня
Код:
SELECT t1.slovo, t2.*, DATEDIFF(t2.date,NOW()) date_interval
FROM sl t1
LEFT JOIN predl t2 ON t1.id=t2.sl_id
WHERE t1.slovo='слово' AND DATEDIFF(t2.date,NOW())<3 AND DATEDIFF(t2.date,NOW())>-3
ORDER BY date_interval DESC
база:
Код:
CREATE TABLE IF NOT EXISTS `predl` (
  `id` int(11) NOT NULL auto_increment,
  `sl_id` int(11) NOT NULL,
  `predlozeniye` text,
  `date` date default NULL,
  PRIMARY KEY  (`id`),
  KEY `date` (`date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;


INSERT INTO `predl` (`id`, `sl_id`, `predlozeniye`, `date`) VALUES
(1, 1, 'текст предложения слово слово', '2010-08-18'),
(2, 2, 'слово текст дата', '2010-08-19'),
(3, 3, 'са с с дад ас дад ад дата', '2010-08-21'),
(4, 4, 'сд ад са дса дса дас ещё асд сад а д', '2010-08-22'),
(5, 1, 'текст предложения слово слово2', '2010-08-17');


CREATE TABLE IF NOT EXISTS `sl` (
  `id` int(11) NOT NULL auto_increment,
  `slovo` varchar(255) default NULL,
  PRIMARY KEY  (`id`),
  KEY `slovo` (`slovo`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;


INSERT INTO `sl` (`id`, `slovo`) VALUES
(1, 'слово'),
(2, 'текст'),
(3, 'дата'),
(4, 'ещё');

и не забываем про индексы для поисковых полей иначе будут тормоза
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху