我试图显示一些子内容,所以我需要得到他们父母的孩子的身份证。
我就是这么做的:
$ids = "SELECT * FROM `web_categories` WHERE parent_id = 14 AND published = 1";
$idscon = $conn->query($ids);
while ($ids = $idscon->fetch_array()){
$idss .= $ids['id'];
}
$project1 = "SELECT * FROM `web_content` WHERE catid in ('$idss') AND state = 1";
$projectcon1 = $conn->query($project1);
$projectcr1 = array();
while ($projectcr1[] = $projectcon1->fetch_array());我试着像这样对$idss进行内爆:
$implode = implode(',', $idss);但这给了我Invalid arguments passed。我做错了什么?
发布于 2016-09-29 07:56:33
您在first循环中做错了.
给你,$idss .= $ids['id'];,你做错了。将值以字符串形式存储在变量中,但当您尝试将其内爆时.它抛出一个错误!使implode()用于将数组设置为字符串。因此,遵循以下步骤。
将$idss .= $ids['id'];更改为$idss[] = $ids['id'];,而不是implode(),使用join()。
创建一个数组名$idss,并将ids推送或插入到该数组中。然后内爆/加入ID。
$idss = array();
while ($ids = $idscon->fetch_array()){
$idss[] = $ids['id'];
}
$implode = implode(',', $idss);现在,您可以在下一个查询中使用这个$implode变量。
发布于 2016-09-29 07:55:49
您只需将所有ID存储在一个数组中,类似于第一个while循环中的$yourIDs[] = $ids['id'];。
对于$idss .= $ids['id'];,您不能使用implode(),因为这个操作的结果应该是"1234“,没有任何逗号。
你只需要用这样的方法:
<?php
$yourIDs = array();
while ($ids = $idscon->fetch_array()){
$yourIDs[] = $ids['id']; // this will save all IDs into $yourIDs array.
}
$idss = implode(',',$yourIDs); // result of this should be 1,2,3,4 etc.
?>发布于 2016-09-29 08:05:49
我认为您很可能在一个查询中做到这一点。
SELECT * FROM `web_content` WHERE `catid` in (
SELECT `id` FROM `web_categories` WHERE `parent_id` = 14 AND `published` = 1
) AND `state` = 1实际上,最初的代码确实是这样做的,但分两个阶段--子查询有时会很慢,但它确实取决于db的大小和预期结果的数量。的确,联接可以而且通常比依赖子查询更高效,因此这也许是另一个需要探索的选项。当mysql执行从外部到内部的查询计划而不是直观的内部到外部的子查询时,会导致服务器爬行--这实际上取决于子查询的复杂性和必须处理的数据量。
https://stackoverflow.com/questions/39764454
复制相似问题