mysql:如何选择没有图像的博客正文?

时间:2019-05-01 17:42:35

标签: mysql text sql-like

我的博客中有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 

2 个答案:

答案 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>
  • 以上某些内容很容易解决。