插入,在多个位置,检查值是否存在

时间:2019-05-06 20:09:46

标签: php mysql sql

我正在收集相对较长的多维数组中有关标题和内容的30个帖子的信息,然后通过一个MySQL查询将它们全部放入数据库中。但是我的检查查询与该插入查询是分开的。我正在通过新帖子的标题检查相似的帖子,然后将其插入。如何将检查查询与插入的查询合并?

这是我大约30个帖子的多维数组:

    array(
        [0] => array(
            [post_title] => $postTitle1,
            [post_content] => $contentTitle1,
        )
        [1] => array(
            [post_title] => $postTitle2,
            [post_content] => $contentTitle2,
        )
        [N] => array(
            [post_title] => $postTitleN,
            [post_content] => $contentTitleN,
        )
    );

这是我根据新帖子标题进行的查询(对每个帖子都可以完成,并且可以正常运行):

SELECT post_title FROM x_post WHERE post_title=$newPostTitle

这是我的插入查询(工作正常):

INSERT INTO x_post (`post_title`, `post_content`, `date_created`, `user_id`)
                              VALUES ((((( My multidimensional array's information will be here after processing )))))


最后,这是我想要的查询,但是它不起作用(合并两个查询):

INSERT INTO x_post (`post_title`, `post_content`, `date_created`, `user_id`) 
SELECT * FROM (SELECT  $postTitle1, $content1,  $time, $userId") AS tmp1, (SELECT  $postTitle2, $content2,  $time, $userId") AS tmp2, .......... and so on ........... , (SELECT  $postTitle30, $content30,  $time, $userId") AS tmp30 WHERE NOT EXIST (SELECT x_post.post_title FROM x_post WHERE x_post.post_title IN ($newPostTitle1, $newPostTitle2, ... and so on... , $newPostTitleN))

编写查询的最佳方法是什么? 实际上,我想检查所有30个帖子,如果一个查询中存在相似的帖子,然后插入那些不相似的帖子。 我知道这很复杂,但是查询很好。

非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用UNION ALL来创建一组少FROM的独立SELECT,然后可以将它们用作一个派生表而不是30。而不是使用{在IN子句中的{1}}中,您可以直接建立关联。

WHERE