Задавайте вопросы, мы ответим
Вы не зашли.
Прошу помощи,
Есть поле title в таблице jos_content. Как сделать запрос в mysql для выборки любого слова из этого поля? но слово должно быть не менее 3-х символов длиной.
1. Сначала выбирается рэндомом поле id
2. Потом выбирается рэндомом одно слово из выборки пункта 1. Это слово должно быть более трех символов длиной.
Правильный код готов оплатить.
Неактивен
Интересует код только sql, без php
Неактивен
Отредактированно deadka (24.06.2011 13:53:53)
Неактивен
deadka написал:
DELIMITER $$
CREATE DEFINER=`deadka`@`%` FUNCTION `find_word`(title_ varchar(255)) RETURNS varchar(255) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE len INT UNSIGNED;
DECLARE start_pos INT UNSIGNED;
DECLARE end_pos INT UNSIGNED;
DECLARE flg_finish BOOL;
IF isnull(title_) THEN
RETURN "";
END IF;
SET title_ = trim(title_);
SET len = length(title_);
IF len < 4 THEN
RETURN "";
END IF;
SET start_pos = 1;
SET flg_finish = FALSE;
outer_find_loop: LOOP
SET end_pos = start_pos;
inner_find_loop: LOOP
SET end_pos = end_pos + 1;
IF (end_pos >= len) THEN
SET flg_finish = TRUE;
LEAVE inner_find_loop;
END IF;
IF SUBSTR(title_, end_pos, 1 ) = ' ' THEN
LEAVE inner_find_loop;
END IF;
END LOOP inner_find_loop;
IF (flg_finish = TRUE) THEN
IF ( end_pos - start_pos >= 3 ) THEN
RETURN SUBSTR(title_, start_pos);
END IF;
RETURN "";
END IF;
IF ( end_pos - start_pos > 3 ) THEN
RETURN SUBSTR(title_, start_pos, end_pos - start_pos);
END IF;
SET start_pos = end_pos + 1;
WHILE SUBSTR(title_, start_pos, 1) = ' ' DO
SET start_pos = start_pos + 1;
END WHILE;
END LOOP outer_find_loop;
return "";
END
Не понял с помощью чего именно тут выбирается случайное слово ?
select title into @title from t_4415_jos_content order by rand() limit 1;
Если в title не будет ни одного слова больше 2 символов то у вас проблема.
Не знаю если для вас важно, случайность тут получается совсем не равномерная.
Пример:
записи "kuku sd" и "test wedf fgfdghj hjkjhk fffg ghjgjhg ghjhgjghj dgdgfdg fgfdsf fdsgd"
У слова "kuku" в 10 раз больше шанса появится чем у "test".
Правильный код готов оплатить.
Для правильного кода нужна правильная структура.
Правильная структура это разобрать ваши тексты на части.
ID | CONTENT
-----|---------------------------------
233 | a1 b2c3 d4e5f6 fgfdg
ID | WORD
-----|---------------------------------
233 | b2c3
233 | d4e5f6
233 | fgfdg
Пореж те старые данные, новые режте на лету и вносите в дополнительную таблицу.
Отредактированно evgeny (24.06.2011 21:34:29)
Неактивен
evgeny написал:
Не понял с помощью чего именно тут выбирается случайное слово ?[/qoute]
beginner написал:
Как сделать запрос в mysql для выборки любого слова из этого поля? но слово должно быть не менее 3-х символов длиной.
Здесь выбирается не случайное, а первое слово, в котором больше трех букв. Первое слово вполне подходит под требование "любое" .
evgeny написал:
select title into @title from t_4415_jos_content order by rand() limit 1;
Если в title не будет ни одного слова больше 2 символов то у вас проблема.
Какая проблема? Функция в этом случае просто вернет пустую строку.
mysql> select find_word('ab ab');
+--------------------+
| find_word('ab ab') |
+--------------------+
| |
+--------------------+
1 row in set (0.00 sec)
evgeny написал:
Для правильного кода нужна правильная структура.
Правильная структура это разобрать ваши тексты на части.
ID | CONTENT
-----|---------------------------------
233 | a1 b2c3 d4e5f6 fgfdg
ID | WORD
-----|---------------------------------
233 | b2c3
233 | d4e5f6
233 | fgfdg
Пореж те старые данные, новые режте на лету и вносите в дополнительную таблицу.
Тут согласен .
Отредактированно deadka (24.06.2011 22:55:17)
Неактивен