Как я могу отфильтровать результаты MySQL по их содержанию? т.е. если содержит хэштеги

Просто хочу узнать, как я могу отфильтровать результат, используя mysql, если поле "content" содержит хэштег.

например, если в результате содержание: "#Euro2012 будет потрясающим"

Я бы не вернул это в моих результатах MySQL....

заранее спасибо

2 ответа

Решение

Для полей varchar вы можете использовать LIKE:

SELECT * FROM myTable WHERE myVarCharField NOT LIKE '%#Euro2012%'

Для текстовых полей вам нужно заглянуть в полнотекстовый поиск.

Обновление (предложено комментариями):

Решение для регулярных выражений:

SELECT * FROM myTable WHERE myVarCharField NOT RLIKE '#.*\s'

Если вы хотите фильтровать по полям, которые начинаются с хештега, добавьте ^ к регулярному выражению.

Используя regex а также preg_match_all(), вы могли бы иметь что-то вроде этого:

$str = <<<STR
this is a string
with a #tag and
another #hello one
STR;

$matches = array();
if (preg_match_all('/#([^\s]+)/', $str, $matches)) {
  var_dump($matches[1]);
}

Что дает следующий вывод:

array
  0 => string 'tag' (length=3)
  1 => string 'hello' (length=5)

И, если вам нужно сделать немного больше манипуляций с ними, вам следует взглянуть на раздел руководства по функциям PCRE: есть и другие, которые могут вам помочь.

Другие вопросы по тегам