【发布时间】:2019-09-24 11:25:43
【问题描述】:
我正在一个相对较长的多维数组中收集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 个帖子是否存在相似的查询,然后插入那些不相似的。 我知道这很复杂,但会是一个很好的查询。
非常感谢。
【问题讨论】:
-
您能解释一下检查查询的目的是什么吗?
-
@KIKOSoftware - 我想检查标题是否存在,不为该帖子执行插入。
-
这个标题不是一个很糟糕的选择吗?如果两个“帖子”的标题相同,但内容完全不同怎么办?对于这些问题,我很抱歉,但是您对我们实际工作的内容知之甚少。通常,您会为此使用记录的某些独特功能,例如唯一 ID。
-
好吧,好吧,无论如何,我相信最好的系统是你一直在使用的:用一个查询检查标题,从你的
$array中删除重复项,然后用另一个查询插入剩余的帖子.其他任何事情都会变得非常难以阅读/难以管理。检查 30 个帖子并不是一场灾难,即使您有一个查询,它仍然需要做同样的工作。您还可以通过在查询的WHERE部分中使用OR来通过一个查询检查30 个帖子,然后从$array中删除所有找到的标题。这样您就只需要运行 2 个查询。 -
好吧,30 次单独的检查会比 1 次大检查稍微慢一些,但是将这些检查和插入查询结合起来,在一个大查询中不会加快速度。但是测试一下,这样你就知道了。