如何将数组插入where子句?这是获取ID的第一个查询:
$query = "SELECT id FROM #_categories WHERE alias = 'agenda'";
$result = mysql_query($query) or die(mysql_error());
while($linha = mysql_fetch_array($result)){
$vNome = $linha['id'];
}
现在是获得最终结果的第二个查询:
$query = "SELECT introtext FROM $tabela WHERE catid IN ($vNome) <> ''";
结果是:
SELECT introtext FROM #_content WHERE catid IN (36) <> ''
为什么我不能将所有ID放在IN?
子句中PS:抱歉英语不好,不是我的母语。
答案 0 :(得分:0)
将循环更改为此
$vNome = array();
$i = 0;
while($linha = mysql_fetch_array($result)){
$vNome[$i] = $linha['id'];
$i++;
}
然后使用这个$ vNome数组。
答案 1 :(得分:0)
$vNome=array();
$result = mysql_query($query) or die(mysql_error());
while($linha = mysql_fetch_array($result)){
$vNome[] = $linha['id'];
}
然后是sql:
$query = "SELECT introtext FROM $tabela WHERE catid IN (".implode(",",$vNome).")";
答案 2 :(得分:0)
IN
是一个SQL关键字。您无法将原始PHP数组传递给SQL。
您必须先将数据读入数组,然后展开数组:
$query = "SELECT id FROM #_categories WHERE alias = 'agenda'";
$result = mysql_query($query) or die(mysql_error());
$vNome = array();
while($linha = mysql_fetch_array($result)) {
$vNome[] = $linha['id']; // don't forget the [] to put it into an array, else the value will be scalar!
}
$query = "SELECT introtext FROM $tabela WHERE catid IN (".implode(",", $vNome).")";
答案 3 :(得分:0)
$ vNome不是一个数组。在你的while子句中,你只是覆盖变量。在此之前,初始化变量
$vNome = array();
然后在里面,将其改为
$vNome[] = $linha['id'];
现在谈到第二个查询时,你不能只是传入数组,你必须将其破坏。
$vNomeStr = implode (',',$vNome);
然后您可以在查询中使用$ vNomeStr。只要它的数字,这将工作正常,否则您还必须将每个项目封装在引号中。
答案 4 :(得分:0)
您是否尝试过这样的嵌套选择语句:
SELECT introtext
FROM $tabela
WHERE catid
IN (
SELECT id
FROM #_categories
WHERE alias = 'agenda'
);
可能有更有效的方法,但这应该有用。
答案 5 :(得分:0)
将数组插入逗号分隔的字符串将使您有机会使用IN (...)
运算符中的“1,2,3”字符串