
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
[x]
Дата
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() Unregistered ![]() |
Доброго времени суток!
Подскажите пожалуйста, в чем ошибка? Пытаюсь вытащить из базы заголовки h1 (они хранятся в виде-<h1> текст</h1>) Пытался через...WHERE `rows` LIKE '%\</h1\>' И так: WHERE `rows` LIKE '%\<\/h1\>' И вообще без обратных слешей, ничего не ищется. Ошибок то же не выдается(В смысле если перемудрить вылезит конечно.) Пробовал через RLIKE, чего-то то же никак. По ходу пьесы узнал про такую класную штуку: REGEXP, но она то же не катит... Спустя 10 минут, 4 секунды (24.01.2012 - 18:45) dadli написал(а): WHERE `rows` LIKE '%<H1>%' Спустя 5 минут, 18 секунд (24.01.2012 - 18:50) Sergen написал(а):
Неа, не работает. Точнее работает но вытаскивает весь текст, включая и h1. А мне нужно только h1. Спустя 4 минуты, 12 секунд (24.01.2012 - 18:54) dadli написал(а): Sergen то ест вам есть : "блабла <h1>текст</h1> еше бла бла" и хотите виташит из него толко "текст" ето так? Спустя 9 секунд (24.01.2012 - 18:55) alexbel2404 написал(а):
не понятно, что нужно тогда Спустя 14 часов, 52 минуты, 8 секунд (25.01.2012 - 09:47) Sergen написал(а):
Нужно вытащить <h1>текст</h1> из текста. А сам текст включая этот заголовок хранится в одной ячейке в базе. Спустя 37 минут, 48 секунд (25.01.2012 - 10:24) asokol написал(а): http://dev.mysql.com/doc/refman/5.0/en/string-functions.html RLIKE - синоним REGEXP. Вам понадобятся LOCATE, SUBSTRING. Спустя 13 часов, 19 секунд (25.01.2012 - 23:25) Sergen написал(а):
LOCATE не подойдет точно, так как возвращает позицию, SUBSTRING то же, поскольку связан то же с позициями Спустя 22 часа, 26 минут, 33 секунды (26.01.2012 - 21:51) Sergen написал(а): Решил эту проблему, работает, но она мне нифига не нравится. Вытаскиваю весь текст и из него с помощью регулярки вытаскиваю заголовок $h1 = eregi("<h1>(.*)</h1>",$rows[rows],$regs); Спустя 20 минут, 35 секунд (26.01.2012 - 22:12) neadekvat написал(а): Sergen, во-первых, это устаревший варинат. К тому же, некорректный. Во-вторых, тебе уже сказали про функции mysql, с помощью которых можно найти позицию <h1> и </h1>, а также обрезать текст по позиции. Спустя 28 минут, 3 секунды (26.01.2012 - 22:40) Sergen написал(а):
neadekvat, Почему устаревший? Почему некорректный? Вырезает именно заголовок h1. Что касается средств mysql. Я понял так.Вычислить позицию первого <h1>, потом </h1> или я чего-то недогоняю? Спустя 28 минут, 3 секунды (26.01.2012 - 23:08) neadekvat написал(а):
Потому что функция eregi помечена "DEPRECATED" и, скорее всего, будет удалена.
Потому что не инвертирована жадность. В тексте
регулярное выражение возьмет
Стоит же инвертировать жадность: <h1>(.*?)</h1> И все будет ок.
Да, а потом обрезать от позиции первого до позиции второго - будет заголовок. Спустя 20 минут, 40 секунд (26.01.2012 - 23:29) vital написал(а): Я бы начал с того, что нельзя хранить данные и делать выборки так, как делает тс. Спустя 4 минуты, 54 секунды (26.01.2012 - 23:34) neadekvat написал(а): vital, запарилось уже про нормализацию втирать. Спустя 1 минута, 39 секунд (26.01.2012 - 23:35) inpost написал(а): Sergen Ты задал вопрос: "как решить через задницу", и ждёшь помощи. Хотя лучше было бы рассказать, что тебе надо в целом, зачем такую вещь в БД хранить? Зачем её вообще парсить и разбивать на части? Спустя 12 минут, 24 секунды (26.01.2012 - 23:48) Sergen написал(а):
В Джумле именно так хранится. Переделать весь джумловский код? Спустя 2 минуты, 43 секунды (26.01.2012 - 23:50) neadekvat написал(а):
Будем спорить или решать проблему? Тебе понятен мой ответ? Спустя 5 минут, 6 секунд (26.01.2012 - 23:55) inpost написал(а): Sergen Может ты говоришь не про Джумлу, а про подключенные к ней модули СТОРОННИХ КРИВОРУКИХ РАЗРАБОТЧИКОВ? ![]() Спустя 1 минута, 57 секунд (26.01.2012 - 23:57) Sergen написал(а):
Насколько я понял, в одном запросе это не сделать Спустя 3 минуты, 44 секунды (27.01.2012 - 00:01) Sergen написал(а):
Вообще-то про стандартный джумловский набор. Мне казалось что текст статьи должен хранится вместе с заголовками, коих может быть несколько (Джумла это или не джумла, без разницы) Или нет? Спустя 2 минуты (27.01.2012 - 00:03) inpost написал(а): В таком случае нет смысла парсить. Есть блок, он весь в textarea загоняется. Другой блок в другой textarea. Спустя 3 минуты, 31 секунда (27.01.2012 - 00:07) Sergen написал(а):
В смысле блок? Статью разбить на блоки? Спустя 7 минут, 5 секунд (27.01.2012 - 00:14) neadekvat написал(а):
Если заголовок у статьи один - то в отдельном столбце.
Неправильно понял. SELECT SUBSTR(`col`, LOCATE('<h1>', `col`) + 4, LOCATE('</h1>', `col`)) FROM `tbl` WHERE `col` LIKE '%<h1>%' Примерно так. Спустя 30 минут, 55 секунд (27.01.2012 - 00:45) killer8080 написал(а):
Не прокатит, третий аргумент SUBSTRING() длина, а не позиция. Спустя 1 минута, 58 секунд (27.01.2012 - 00:47) neadekvat написал(а):
Пардон, не подумал. Тогда как-то так: SELECT SUBSTR(`col`, (LOCATE('<h1>', `col`) + 4), (LOCATE('</h1>', `col`) - (LOCATE('<h1>', `col`) + 4))) Спустя 2 минуты, 34 секунды (27.01.2012 - 00:49) killer8080 написал(а): нет, правильней так SELECT Спустя 3 минуты, 52 секунды (27.01.2012 - 00:53) neadekvat написал(а): killer8080, принципиальное отличие, кроме раскрытых скобок? Спустя 2 минуты, 27 секунд (27.01.2012 - 00:55) killer8080 написал(а): neadekvat -4, а не +4 Иначе вернет огрызок тега </h1 Спустя 2 минуты, 29 секунд (27.01.2012 - 00:58) neadekvat написал(а):
А, это фигня. Я никогда считать не умел. Попробую - узнаю, куда смещать указатель надо. Хоть какая-то бы работа автору досталась. Спустя 7 минут, 32 секунды (27.01.2012 - 01:06) killer8080 написал(а):
Я то же ![]() LOCATE('</h1>', `content`) - LOCATE('<h1>', `content`) даст длину текста заголовка, плюс длина начального тега, еще плюс 4, и того 8 лишних символов. Т.е. вернет закрывающий тег и 3 последующих символа, так что насчет огрызка я то же был не прав ![]() Спустя 2 минуты, 47 секунд (27.01.2012 - 01:08) neadekvat написал(а):
Я неимоверно рад, что мне не пошел в хирурги или, того хуже, кардиологи. Где одна попытка. Проще запустить - и посмотреть. Не вижу смысла забивать себе голову лишними переменными, тем более, что доп. запуск и исправление запроса получится реально быстрее, чем высчитывать, в какой точке будет находится указатель) К тому же, ты прекрасно знаешь, все эти функции работы со стороками порой возвращают неожиданный результат... Спустя 7 часов, 13 минут, 12 секунд (27.01.2012 - 08:21) Sergen написал(а): Принцип понял, только вот выходит ошибка. Я пробовал вот так:
Спустя 1 час, 7 минут, 50 секунд (27.01.2012 - 09:29) killer8080 написал(а):
И что? Нам её угадывать? Или ctrl+c, ctrl+v не работает? Спустя 8 часов, 40 минут, 18 секунд (27.01.2012 - 18:10) Sergen написал(а):
Да блин, я утром перед работой быстро набросал, поэтому не все изложил. Сейчас посмотрел, ошибки нет. Поковыряюсь вечером, обязательно отпишу Спустя 21 час, 56 минут, 52 секунды (28.01.2012 - 16:06) Sergen написал(а): Если выводить $rows = mysql_fetch_assoc($result); И дальше echo"$rows[text]": то ничего не выводится Если просто print_r($rows); То выводится Array ( [SUBSTRING(`introtext`, ((LOCATE(' Не пойму, нужно загонять в строку и через регулярку выводить текст? Спустя 9 минут, 47 секунд (28.01.2012 - 16:16) neadekvat написал(а): Дополни запрос: SELECT SUBSTRING(...) as introtext Тогда можно будет вывести так: echo $rows['introtext']; Спустя 35 минут, 24 секунды (28.01.2012 - 16:52) Sergen написал(а):
Спасибо огромное работает! Спустя 5 часов, 12 минут, 41 секунда (28.01.2012 - 22:04) Sergen написал(а): Кстати, я тут решил поизвращаться дальше...А что если вытащить другие заголовки или текст в других тегах, например <ем>? Спустя 2 часа, 24 секунды (29.01.2012 - 00:05) neadekvat написал(а): Очевидно, надо сменить h1 на em. Спустя 10 часов, 17 минут, 22 секунды (29.01.2012 - 10:22) Sergen написал(а):
Да не, помимо h1 еще em например...Вчера пробовал, фигня. Где-то прочитал что лучше подойдет в этом случае SUBSTRING_INDEX. Сегодня поэксперементирую Спустя 27 минут, 37 секунд (29.01.2012 - 10:50) Sergen написал(а): Подскажите пожалуйста, а в запросе можно присваивать найденные строки переменным? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
![]() |
![]() ![]() ![]() |