Как я могу найти наиболее часто упоминаемые хэштеги в столбце MySQL?

В моей базе данных есть таблица сообщений с 3 полями: ‘messageid’,messagetext (varchar), dateposted (datetime)

Я хочу хранить кучу сообщений в поле messagetext вместе с соответствующей датой размещения в поле dateposted, Многие из этих сообщений будут иметь hashtags в них.

Затем, используя PHP и MySQL, я хочу выяснить, какие хэштеги входят в пятерку наиболее часто упоминаемых hashtags в сообщениях, размещенных на прошлой неделе.

Как я могу это сделать? Буду очень признателен за любую помощь. Спасибо заранее.

0

Решение

Не поймите меня неправильно, но вы настроили себя на мир боли. Лучший способ продолжить было бы следовать совету одинокого дня и разбирать хэштеги во время вставки. Это также значительно сокращает время обработки и делает его более детерминированным (рабочая нагрузка «распределяется» между вставками).

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

1) Распознать теги.

2) Многократный выбор тегов. Если у вас есть сообщение о том, что «#MySQL-разбиение #cool», вы хотите получить два строки из этого одного сообщения, одно говорит «MySQL», другое «круто».

3) Выбор соответствующих сообщений

4) Выступления

Вы можете подойти к этому как минимум двумя способами. Вы можете использовать сохраненная функция , который вы найдете здесь на ТАК (на самом деле из этот сайт) — вам придется изменить его, хотя.

Этот синтаксис даст вам первое вхождение #hashtag в value плюс весь текст, следующий за ним:

select substring(value, LENGTH(substring_index(value, '#', 1))+1);

Затем вам нужно будет решить, где для каждого #hashtag это #stops. (И это может быть #parenthesized). На этом этапе вам нужно регулярное выражение или для поиска последовательности по крайней мере одного буквенно-цифрового символа — на языке регулярных выражений, [a-zA-Z0-9]+ — указав все возможные символы или используя цикл, то есть «#» в порядке, «#t» в порядке, «#ta» в порядке, «#tag» в порядке, «#tag» — нет, и поэтому ваш Хэштегом является «#tag» (или «тег»).

Еще один более перспективный подход заключается в использовании пользовательская функция захватывать хэштеги; ты можешь использовать PREG_CAPTURE.

Вам, вероятно, придется объединить оба подхода: изменить настройки хранимой функции и внутренний цикл для чтения

DECLARE cur1 CURSOR FOR SELECT messages.messagetext
FROM messages
WHERE messages.messagetext LIKE '%#%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

DROP TEMPORARY TABLE IF EXISTS table2;
CREATE TEMPORARY TABLE table2( hashtag` VARCHAR(255) NOT NULL

) ДВИГАТЕЛЬ = Память;

...

SET occurrence = (SELECT LENGTH(msgtext)
- LENGTH(REPLACE(msgtext, '#, ''))
+1);
SET i=1;
WHILE i <= occurrence DO
INSERT INTO table2 VALUES SELECT PREG_CAPTURE('/#([a-z0-9]+)/i', messagetext, occurrence));
SET i = i + 1;

END WHILE;
...

Это вернет список идентификаторов сообщений и хэштегов. Затем вам нужно GROUP их BY хэштег, посчитай их и ORDER по количеству DESCнаконец добавив LIMIT 5 чтобы получить только пять самых популярных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]