用 if elseif else 列出名字
Listing names with if elseif else
我正在尝试列出除 id 36 之外的名称。这是我拥有的名称,但它不起作用。有人可以帮忙吗?
$sql = "SELECT `ls_names`.`id` , `ls_names`.`name` FROM `thedb`.`ls_names` ";
$names = mysql_query($sql);
if(count($names) > 0)
$row_count = count($names);
elseif ($names . $id = 36)
echo '';
else
$row_count = 1;
只获取除id 36以外的数据,然后在sql查询中使用Where子句,然后显示
$sql = "SELECT `ls_names`.`id` , `ls_names`.`name` FROM `thedb`.`ls_names` Where `ls_names`.`id` NOT IN (36)";
看看这个位:elseif ($names . $id = 36)
你不是在这一行做比较,你是在做赋值。将其更改为:
elseif ($names . $id == 36)
此外,$names
变量只是查询的结果,因此它是一个资源串联 $id
并没有达到您的预期。
$names
设置为 mysql_query
的结果。来自 http://php.net/manual/en/function.mysql-query.php:
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning
resultset, mysql_query() returns a resource on success, or FALSE on
error.
另一方面,count()
需要一个 Countable
- mysql 资源是可数的吗?您不应该使用 mysql_num_rows
来计算响应中的行数吗?
以什么方式将 $names
连接到 $id
(您未显示其定义)是一个有效的字符串?
我想如果你仔细阅读你的 if
声明,你会发现它是病态的。想一想:
if( number_of_rows > 0 )
$row_count = number_of_rows
elsif result_set . $id == 36
echo ''
else
row_count = 1
据我所知,这并没有取得任何明显的效果。
最后,正如另一个答案所建议的那样,如果您想从数据库中过滤结果,请使用 数据库 过滤结果,不要在 PHP 中进行过滤。数据库非常擅长这种事情。将此代码移动到 PHP 是一种常见的反模式。
执行查询和检索结果分 2 个独立的步骤完成。您向我们展示的代码与您描述的问题不符:
"I'm trying to list names except for id 36"
然后尝试:
$sql = "SELECT `ls_names`.`id` , `ls_names`.`name`"
." FROM `thedb`.`ls_names` ";
$result = mysql_query($sql);
while ($row=mysql_fetch_assoc($result)) {
if (36!=$row['id']) {
echo $row['name'] . ",";
}
}
但是从数据库中检索数据后过滤数据是不好的做法。如果您不需要数据,请不要获取它:
SELECT id, name FROM thedb.ls_names WHERE id <> 36
我正在尝试列出除 id 36 之外的名称。这是我拥有的名称,但它不起作用。有人可以帮忙吗?
$sql = "SELECT `ls_names`.`id` , `ls_names`.`name` FROM `thedb`.`ls_names` ";
$names = mysql_query($sql);
if(count($names) > 0)
$row_count = count($names);
elseif ($names . $id = 36)
echo '';
else
$row_count = 1;
只获取除id 36以外的数据,然后在sql查询中使用Where子句,然后显示
$sql = "SELECT `ls_names`.`id` , `ls_names`.`name` FROM `thedb`.`ls_names` Where `ls_names`.`id` NOT IN (36)";
看看这个位:elseif ($names . $id = 36)
你不是在这一行做比较,你是在做赋值。将其更改为:
elseif ($names . $id == 36)
此外,$names
变量只是查询的结果,因此它是一个资源串联 $id
并没有达到您的预期。
$names
设置为 mysql_query
的结果。来自 http://php.net/manual/en/function.mysql-query.php:
另一方面,For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
count()
需要一个 Countable
- mysql 资源是可数的吗?您不应该使用 mysql_num_rows
来计算响应中的行数吗?
以什么方式将 $names
连接到 $id
(您未显示其定义)是一个有效的字符串?
我想如果你仔细阅读你的 if
声明,你会发现它是病态的。想一想:
if( number_of_rows > 0 )
$row_count = number_of_rows
elsif result_set . $id == 36
echo ''
else
row_count = 1
据我所知,这并没有取得任何明显的效果。
最后,正如另一个答案所建议的那样,如果您想从数据库中过滤结果,请使用 数据库 过滤结果,不要在 PHP 中进行过滤。数据库非常擅长这种事情。将此代码移动到 PHP 是一种常见的反模式。
执行查询和检索结果分 2 个独立的步骤完成。您向我们展示的代码与您描述的问题不符:
"I'm trying to list names except for id 36"
然后尝试:
$sql = "SELECT `ls_names`.`id` , `ls_names`.`name`"
." FROM `thedb`.`ls_names` ";
$result = mysql_query($sql);
while ($row=mysql_fetch_assoc($result)) {
if (36!=$row['id']) {
echo $row['name'] . ",";
}
}
但是从数据库中检索数据后过滤数据是不好的做法。如果您不需要数据,请不要获取它:
SELECT id, name FROM thedb.ls_names WHERE id <> 36