MYSQL查找两个表中是否存在类似的条目

时间:2016-02-04 12:09:27

标签: php mysql sql regex wordpress

我在数据库中有2个表:images_1wp_posts,其中一个条目是图像文件名,而另一个条目具有相似的帖子标题名称,它是' s只是在wordpress数据库中,该条目附加了图像文件类型。由于我从table_1进行导入,因此我需要在导入之前检查wp_post表中是否已存在该帖子。

所以我的table_1结构有点像这样:

TABLE_1

filename_uploaded
-----------------
asd654as8_dasd3
a32asd586as_d6584
asdad_asdlf

我的wp_post表格为post_type = attachment

wp_post

post_title
----------
asd654as8_dasd3.jpg
a32asd586as_d6584.jpg
asdad_asdlf.png

所以我尝试了:

$img_query = "SELECT *
              FROM table_1
              WHERE NOT EXISTS (SELECT *
                                FROM wp_posts
                                WHERE wp_posts.post_title LIKE table_1.filename_uploaded
                                AND wp_posts.post_type = 'attachment')";

$img_query_query = $wpdb->get_results($img_query, ARRAY_A);

哪个不起作用。

问题是我无法检查它们是否相等,因为它们不是。它们类似,但post_title具有文件类型扩展名。我使用regular expressions in mysql queries进行了搜索,但我不知道该怎么做。

任何帮助都可以。

编辑:

我只是注意到了

  

[非法混合整理(utf8_general_ci,IMPLICIT)和(utf8_swedish_ci,IMPLICIT)进行操作'喜欢']

我的table_1位于swedish_ci,wp_post位于general_ci。

我最后尝试添加COLLATE utf8_swedish_ci,但没有运气。

按照Gordon Linoff的建议,我试过了

"SELECT t_img.*
          FROM img_images t_img
          WHERE NOT EXISTS (SELECT *
                            FROM wp_posts p
                            WHERE p.post_title LIKE CONCAT(t_img.filename_uploaded, '.%')
                            AND p.post_type = 'attachment') COLLATE utf8_swedish_ci";

但没有运气。

4 个答案:

答案 0 :(得分:1)

你很接近但没有考虑后缀。所以:

SELECT t1.*
FROM table_1 t1
WHERE NOT EXISTS (SELECT *
                  FROM wp_posts p
                  WHERE p.post_title LIKE CONCAT(t1.filename_uploaded, '.%') AND
                        p.post_type = 'attachment'
                 );

答案 1 :(得分:1)

MYSQL See the manual

中有许多字符串函数

使用那些你可以做到这一点

.png

这也可以处理任何文件扩展名,因此,如果您上传了.gif"ms-appx:///cache/"以及string等图片格式,您就会受到保护。

答案 2 :(得分:1)

您需要使用此查询并且不使用类似查询,当您执行pratikpratik12这样的某个用户名时,它会出现问题pratik并且喜欢给你两个记录

select * 
from table_1 
  left join wp_post on wp_post.post_title = CONCAT(table_1.filename_uploaded,'.jpg') 
where wp_post.post_title = null

答案 3 :(得分:0)

如果只是添加的扩展程序,请尝试使用:

...    
WHERE wp_posts.post_title LIKE table_1.filename_uploaded + '%'
...

SQL Like运算符:http://www.w3schools.com/sql/sql_like.asp