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

Тема в разделе "Базы данных", создана пользователем latteo, 19 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    Есть база id (int) slovo(varchar(255)) predlozeniye (text)
    Как составить запрос, чтобы отобразило только те строки, в который колонка predlozeniye содержит slovo из этой же строки?
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    PHP:
    SELECT *
          
    FROM t1
          WHERE  
    `predlozeniyeLIKE CONCAT'%', `slovo` , '%' )

     
    latteo нравится это.
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    Спасибо за быстрый ответ. Есть еще вопрос.
    Можно ли сделать так чтобы отобразило только записи с уникальным значением predlozeniye (predlozeniye может неоднократно повторятся)?
     
  4. Agler

    Agler Постоялец

    Регистр.:
    17 авг 2008
    Сообщения:
    94
    Симпатии:
    13
    PHP:
    SELECT DISTINCT 
          
    FROM t1 
          WHERE  
    `predlozeniyeLIKE CONCAT'%', `slovo` , '%' 
     
    latteo нравится это.
  5. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    Спасибо, за наводку только после DISTINCT в данном случае надо указать predlozeniye, иначе результат не изменится:
    PHP:
    SELECT DISTINCT predlozeniye 
          FROM t1 
          WHERE  
    `predlozeniyeLIKE CONCAT'%', `slovo` , '%' 
     
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    А теперь небольшое усложнение задача та же:
    Вот только архитектура усложнилась:
    1я таблица c именем sl:
    id slovo
    2я таблица с именем predl:
    id sl_id predlozeniye date
    где sl_id указывает на id строки содержащей slovo из первой таблице

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

    Все мои попытки сделать выборку приводят к зависанию P4 :( Надеюсь на вашу помощь
     
  7. Agler

    Agler Постоялец

    Регистр.:
    17 авг 2008
    Сообщения:
    94
    Симпатии:
    13
    Виртуальное объединение таблиц для выборки делается через LEFT JOIN (Можно в него поставить условие для объединения). Дата в timestamp?
    если в двух разных таблицах одинаковые поля, то при составлении условия используешь `имя таблицы`.`поле`
     
    latteo нравится это.
  8. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    ищем "слово" в таблице 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, 'ещё');
    
    и не забываем про индексы для поисковых полей иначе будут тормоза
     
    latteo нравится это.
Статус темы:
Закрыта.