【发布时间】:2014-03-14 17:57:23
【问题描述】:
我有一个充满文章的数据库表。在某些情况下,文章底部有一个我想解析以从中获取信息的块。例如,以下是文章表中的两个可能值:
<p>Test test <blockquote class="pull">text quote</blockquote></p>
<p> </p>
<p><span class="italic">italic text</span></p>
<div class="bottom-block"><div class="picture" style="background-image:url('/generator?f=somepicture.jpg');"></div><div class="blurb">Blurb about person<a href="http://website.com">http://website.com</a></div></div>
还有一个例子:
<p>Some content</p>
<div class="bottom-block"><img alt="John Doe" class="picture" src="/assets/images/JOHN_DOE_1.jpg"><div class="blurb"><p>John Doe is a guy from Texas. <a href="http://johnswebsite.com" target="_blank">John's Website</a> and has a large following.</p></div></div>
以上是在数据库中看到的两个值的示例。现在,我希望能够提取某些信息。更准确地说,我想提取 Name、Url、ImageName 和 Blurb
在第一个示例中,在对该值运行查询后,我想看看:
名称:
Url:http://website.com
ImageName:somepicture.jpg
Blurb:Blurb about person<a href="http://website.com">http://website.com</a>
在第二个例子中:
名称:John Doe
Url:http://johnswebsite.com
ImageName:JOHN_DOE_1.jpg
Blurb:<p>John Doe is a guy from Texas. <a href="http://johnswebsite.com" target="_blank">John's Website</a> and has a large following.</p>
我正在玩一个 SQL 查询,它做得不错,但仍然有很多不一致之处。
SELECT id, url, content, TRIM(BOTH '\n' FROM TRIM(TRAILING '</div>\n</div>' FROM TRIM(TRAILING '</div></div>' FROM TRIM(SUBSTRING(content, LOCATE('class="bottom-block"',content)+18))))) as block_extract, TRIM(BOTH '\n' FROM TRIM(TRAILING '</div>\n</div>' FROM TRIM(TRAILING '</div></div>' FROM TRIM(SUBSTRING(content, LOCATE('class="blurb"',content)+12))))) as blurb FROM articles WHERE content LIKE '%bottom-block%' GROUP BY block_extract;
【问题讨论】:
-
这是一个 monstterr SQL 语句。
-
为什么你的问题被标记为 PHP?您是否需要在 SQL 语句中执行此操作,或者您可以使用 PHP 来解析数据(这显然更容易)?更一般地说,您希望在什么情况下解析这些数据?
标签: php mysql regex parsing trim