我的博客中有8万个节点,我只想选择博客中没有图片的正文。
我尝试过
select * from field_data_field_body where (field_body_value like '<img%>' or field_body_value like '<p><img%/></p>');
但是我要确保我抓住了只有图像主体的所有节点。
有更好的方法吗?
更新
这是一些正文值示例:
<img width=\"120\" vspace=\"5\" hspace=\"5\" height=\"90\" border=\"0\" align=\"left\" src=\"/static/video/missiles.jpg\" /> <h2><a href=\"/items/itembody/200410290009\">Some tests value </a></h2>
<p><img src=\"/static/images/home/205/rove-205.JPG\" /></p> <--need these
<img src=\"/static/images/90billion.jpg\" class=\"post-right\" width=\"450\" height=\"246\" /></p>\n<p>The media declared</a> one of the top last night</p>
while <p><img src=\"/static/images/hornerb.jpg\" width=\"645\" height=\"337\" /></p>\n<p>An independent report has all but destroyed one of the right\'s most cherished \"scandals,\" </p>
<p><img src=\"/static/images/205/rove-205.JPG\" /></p> <--need these
答案 0 :(得分:1)
如果您的field_body_value只是可能包含标记的HTML长字符串,并且您想在字段中的任何位置查找包含该标记的行,则该方法应该起作用。 您必须在要查找的值之前和之后使用通配符,因为它可能出现在文本内的任何地方。
select * from field_data_field_body where field_body_value like '%<img%';
答案 1 :(得分:0)
WHERE body REGEXP '^([[:space:]]*<img[^>]*>)+[[:space:]]*'
一些注意事项:
[[:space:]]*
img标签之间可能存在空格,换行符等[^>]*
在下一个>
之前吃光了东西,因此与非img标签不匹配。^ and
$`“锚定”字符串。同时允许<p>
,<br>
和其他仅生成“空白”的标记要困难得多。这是另一种尝试:
WHERE body REGEXP '^([[:space:]]+|<img[^>]*>|<br>|</?p>)+$'
注意:
body
仅匹配空格<br >
,<br/>
和其他变体。<BR>
。