[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбор значений по словам из строки
Betcoll
Добрый день.

Описываю ситуацию.

Есть таблица 'news', в ней поле 'tags', куда теги записываются через запятую, например: зенит,футбол,РПЛ

Мне надо выбрать последние три новости, где в тегах есть, хотя бы одно из двух слов. То есть если идет матч "Зенит - ЦСКА", мне надо выбрать новости, где в тегах есть "Зенит" и ЦСКА.

Может, кто-то посоветует систему тегов лучше. Спасибо всем :-)
Valick
Betcoll, хранить теги через запятую исключительно для вывода в новости
хранить теги в нормализованном виде для поиска по ним и работы на уровне СУРБД в целом
главное не забыть про синхронизацию этих тегов


_____________
Стимулятор ~yoomoney - 41001303250491
Betcoll
Цитата (Valick @ 16.01.2020 - 15:54)
Betcoll, хранить теги через запятую исключительно для вывода в новости
хранить теги в нормализованном виде для поиска по ним и работы на уровне СУРБД в целом
главное не забыть про синхронизацию этих тегов

Можно чуть подробнее об этом.
Valick
Цитата (Betcoll @ 16.01.2020 - 15:28)
Можно чуть подробнее об этом.

можно, как только будет достаточно на это времени

_____________
Стимулятор ~yoomoney - 41001303250491
Valick
SELECT `news`.*, COUNT(`n_id`) `cnt`
FROM (SELECT * FROM `tags` WHERE `t_tag` IN('спорт','футбол','зенит')) `tags`
LEFT JOIN `news_tags`
USING(`t_id`)
LEFT JOIN `news`
USING(`n_id`)
GROUP BY `n_id`
ORDER BY `cnt` DESC


дамп
-- phpMyAdmin SQL Dump
-- version 4.8.3
-- https://www.phpmyadmin.net/
--
-- Хост: 127.0.0.1:3306
-- Время создания: Янв 16 2020 г., 22:34
-- Версия сервера: 5.6.41
-- Версия PHP: 5.6.38

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- База данных: `news`
--

-- --------------------------------------------------------

--
-- Структура таблицы `news`
--

CREATE TABLE `news` (
`n_id` int(11) NOT NULL,
`n_tags` varchar(255) NOT NULL,
`n_titse` varchar(255) NOT NULL,
`n_text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `news`
--

INSERT INTO `news` (`n_id`, `n_tags`, `n_titse`, `n_text`) VALUES
(1, 'спорт, футбол, зенит', 'Зенит чемпион', 'Типа тут новость'),
(2, 'спорт, футбол, спартак', 'Спартак чемпион', 'Тут типа снова новость');

-- --------------------------------------------------------

--
-- Структура таблицы `news_tags`
--

CREATE TABLE `news_tags` (
`n_id` int(11) NOT NULL,
`t_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `news_tags`
--

INSERT INTO `news_tags` (`n_id`, `t_id`) VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 1),
(2, 2),
(2, 4);

-- --------------------------------------------------------

--
-- Структура таблицы `tags`
--

CREATE TABLE `tags` (
`t_id` int(11) NOT NULL,
`t_tag` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `tags`
--

INSERT INTO `tags` (`t_id`, `t_tag`) VALUES
(1, 'спорт'),
(2, 'футбол'),
(3, 'зенит'),
(4, 'спартак');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `news`
--
ALTER TABLE `news`
ADD PRIMARY KEY (`n_id`);

--
-- Индексы таблицы `news_tags`
--
ALTER TABLE `news_tags`
ADD PRIMARY KEY (`n_id`,`t_id`);

--
-- Индексы таблицы `tags`
--
ALTER TABLE `tags`
ADD PRIMARY KEY (`t_id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `news`
--
ALTER TABLE `news`
MODIFY `n_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

--
-- AUTO_INCREMENT для таблицы `tags`
--
ALTER TABLE `tags`
MODIFY `t_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


надеюсь как добавить к новостям время и выбрать последних три догадаешься

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.