【问题标题】:MYSQL find if similar entry exists in two tablesMYSQL查找两个表中是否存在相似条目
【发布时间】:2016-02-04 12:09:27
【问题描述】:

我在数据库中有 2 个表:images_1wp_posts,其中一个条目是图像文件名,而另一个条目具有相似的帖子标题名称,只是在 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) 用于操作 'like']

我的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";

但没有运气。

【问题讨论】:

    标签: php mysql sql regex wordpress


    【解决方案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'
                     );
    

    【讨论】:

    • 我注意到我的表格中有不同的排序规则,有什么解决办法吗?
    • 查看@PratikBhalodiya 的回答,了解为什么 LIKE 可能有点不准确
    • 我手动将两个表的排序规则更改为相同 (utf8_general_ci),这返回了我正在寻找的数量:)
    【解决方案2】:

    你需要使用这个查询并且不要使用类似的查询当一些像这样的用户名 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
    

    【讨论】:

    • 我同意不使用 LIKE,但如果有人上传了 .png.gif 或......
    【解决方案3】:

    如果只是添加的扩展,请尝试:

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

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

    【讨论】:

    • 查看@PratikBhalodiya 的回答,了解为什么 LIKE 可能有点不准确
    【解决方案4】:

    MYSQL中有大量的字符串函数See the manual

    使用那些你可以做到的

    $img_query = "SELECT *
                  FROM table_1 t1
                  WHERE NOT EXISTS 
                     (SELECT *
                      FROM wp_posts
                      WHERE wp_posts.post_title = SUBSTRING_INDEX(t1.filename_upload, '.', 1)
                        AND wp_posts.post_type = 'attachment')";
    

    这也可以处理任何文件扩展名,因此如果您上传了 .jpg.png.gif 等图像格式,您将被覆盖。

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 2020-09-07
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 2015-01-19
      相关资源
      最近更新 更多