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