PHP的动作非常灵活
好吧,我真的不知道标题是什么,因为对我来说,这里应该没有问题 我正在尝试构建一个SQL查询,唯一的方法是在第一个ID=之后添加一个或多个字符串 因为我不能在中间的ID=X上有一个OR语句,我想我应该做一个简单的事情,只计算到1,然后在1之后的每一次迭代中,简单地把“OR”放在下一个数字之前 这在第二次迭代中效果很好,但在第三次和第四次迭代中,它跳过了数字之间的相加,因此它变成了ID=123或56 43 12 代码是一个更大事物的一部分,因此最后一个}之前的}是anotehr循环的结束PHP的动作非常灵活,php,mysql,sql,iteration,Php,Mysql,Sql,Iteration,好吧,我真的不知道标题是什么,因为对我来说,这里应该没有问题 我正在尝试构建一个SQL查询,唯一的方法是在第一个ID=之后添加一个或多个字符串 因为我不能在中间的ID=X上有一个OR语句,我想我应该做一个简单的事情,只计算到1,然后在1之后的每一次迭代中,简单地把“OR”放在下一个数字之前 这在第二次迭代中效果很好,但在第三次和第四次迭代中,它跳过了数字之间的相加,因此它变成了ID=123或56 43 12 代码是一个更大事物的一部分,因此最后一个}之前的}是anotehr循环的结束
$count=0;
while($resultArr = $result->fetch_array(MYSQLI_NUM)){
if($count>=1)
{
echo "IN COUNT IF<br>";
$sqlQuery .= " OR ";
}
else $count++;
echo "COUNT= ". $count . "<br>";
$sqlQuery .= " {$resultArr[0]} ";
if (!$result) {
die('Contact Admin! Invalid SQL query: ' . mysql_error());
}
}
}
# lägg till sista biten och kolla hur det ska sorteras
$sqlQuery .= "AND post_status='publish' " . $this->returnSort();
echo "DEBUG- buildKategoryQuery QUERY= <br>{$sqlQuery}<br>";
return $sqlQuery;
我相信你想说的是
从id=159或595或187的表中选择*无效SQL;相反,它应该是从id=159或id=595或id=187的表中选择*
一个较短的语法是使用IN
操作符:SELECT*FROM table WHERE id IN(159595187)
我相信您想说的是
从id=159或595或187的表中选择*无效SQL;相反,它应该是从id=159或id=595或id=187的表中选择*
较短的语法是使用
中的运算符:SELECT*FROM table WHERE id IN(159595187)
添加“或”的更简单方法是使用数组:
$parts = array();
while($resultArr = $result->fetch_array(MYSQLI_NUM)) {
$parts[] = $resultArr[0];
}
if( !empty( $parts ) ) {
$sqlQuery .= "(" . implode( " OR ", $parts ) . ")";
}
希望这有帮助
编辑:
关于循环不能按预期工作的原因:您只在else情况下增加$count,而不是在大多数迭代结束的if情况下增加$count…添加“OR”的更简单方法是使用数组:
$parts = array();
while($resultArr = $result->fetch_array(MYSQLI_NUM)) {
$parts[] = $resultArr[0];
}
if( !empty( $parts ) ) {
$sqlQuery .= "(" . implode( " OR ", $parts ) . ")";
}
希望这有帮助
编辑:
关于循环无法按预期工作的原因:您仅在else情况下增加$count,而不是在大多数迭代结束的if情况下…
在foreach循环的每次迭代期间运行,$count
也会重置为0。当您试图添加到外部查询并依赖该$count
变量来确定是否向WHERE子句添加“或”时,这是有问题的
您可以将所有内容组合到一个查询中,而不是运行多个SQL查询:
<?php
function buildKategoryQuery()
{
// Get valid categories (where the key exists in $this->kategoriArr)
$categories = array_filter($this->catMap, function ($value, $key) {
return $this->kategoriArr[$key];
}, ARRAY_FILTER_USE_BOTH);
$sql_category_list = implode(', ', array_unique(array_values($categories))) . ')';
$sql_sort = $this->returnSort();
$sqlQuery = <<<SQL
SELECT post_title, guid, post_date, comment_count
FROM wp_posts
WHERE ID IN (
SELECT object_id FROM wp_term_relationships
WHERE term_taxonomy_id IN ({$sql_category_list})
)
AND post_status = 'publish'
{$sql_sort}
SQL;
return $sqlQuery;
}
$katCommand
在foreach循环的每次迭代期间运行,$count
也会重置为0。当您试图添加到外部查询并依赖该$count
变量来确定是否向WHERE子句添加“或”时,这是有问题的
您可以将所有内容组合到一个查询中,而不是运行多个SQL查询:
<?php
function buildKategoryQuery()
{
// Get valid categories (where the key exists in $this->kategoriArr)
$categories = array_filter($this->catMap, function ($value, $key) {
return $this->kategoriArr[$key];
}, ARRAY_FILTER_USE_BOTH);
$sql_category_list = implode(', ', array_unique(array_values($categories))) . ')';
$sql_sort = $this->returnSort();
$sqlQuery = <<<SQL
SELECT post_title, guid, post_date, comment_count
FROM wp_posts
WHERE ID IN (
SELECT object_id FROM wp_term_relationships
WHERE term_taxonomy_id IN ({$sql_category_list})
)
AND post_status = 'publish'
{$sql_sort}
SQL;
return $sqlQuery;
}
我想这会有帮助,但它是否会跳过我的if/else语句第三次迭代?No SELECT*FROM table,其中id=159或595或187不是无效的。对我有用。它本身可能不是无效的,但它不会返回你想要的。为了突出这个问题,您是否只得到行id仅为159、595或187的结果?在中,其中id=159或595
,595
作为布尔表达式计算,它返回true,因为它不是0
,所以您不会得到错误。。。和所有的行。我想这会有帮助,但wtf会跳过我的if/else语句吗?No SELECT*FROM table,其中id=159、595或187不是无效的。对我有用。它本身可能不是无效的,但它不会返回你想要的。为了突出这个问题,您是否只得到行id仅为159、595或187的结果?在中,其中id=159或595
,595
作为布尔表达式计算,它返回true,因为它不是0
,所以您不会得到错误。。。和所有行。您介意再添加一点代码吗(特别是,在您将$count
设置为0的位置上方的几行?还有,为什么在$count
为0时只增加$count
?为什么不删除else子句,只需执行echo“count=”。++$count。“
”
相反?我同意@ChrisForrence,您的$result
似乎没有给出任何结果,它在外循环中循环,因为我只需要增加它一次,之后每次迭代我都需要在查询中使用OR。因此我需要增加它或将其添加到查询中。在SELECT object\u id FROM
w中返回多少行p_term_relationships`WHERE term_taxonomy_id=0`?您是否介意再添加一点代码(具体地说,在您将$count
设置为0的位置上方的几行代码?另外,当$count
为0时,为什么只增加$count
?为什么不删除else子句并简单地执行echo“count=“.+$count.”
“
相反?我同意@ChrisForrence,您的$result
似乎没有给出任何结果,它在外循环中循环,因为我只需要增加它一次,之后每次迭代我都需要在查询中使用OR。因此我需要增加它或将其添加到查询中。在SELECT object\u id FROM
w中返回多少行p\u term\u relationships`WHERE term\u taxonomy\u id=0`?@odepax的答案基本上是正确的。我的答案可以帮助您为将来编写PHP代码,但真正的问题是SQL语句本身。您应该接受他的答案为正确答案。@odepax的答案基本上是正确的。我的答案可以帮助您为fu编写PHP代码没错,但真正的问题是SQL语句本身。你应该接受他的答案是正确的。