Php 尝试进行选择,其中我的类别可以是我的类别表中的所有类别

Php 尝试进行选择,其中我的类别可以是我的类别表中的所有类别,php,sql,Php,Sql,我试着在我的表格中选择一个帖子,我的类别可以是动作、冒险、喜剧和科幻 首先,我想知道在where子句中,sql中是否有类似“All”的内容: $where = 'ALL'; $limit = '16'; SELECT * FROM posts WHERE category = '$where' ORDER BY visits ASC LIMIT $limit 但是我没有看到任何关于它的信息,所有这些信息都不一定有效,所以我试着写下我所有的分类: $where = 'action OR cate

我试着在我的表格中选择一个帖子,我的类别可以是动作、冒险、喜剧和科幻

首先,我想知道在where子句中,sql中是否有类似“All”的内容:

$where = 'ALL';
$limit = '16';
SELECT * FROM posts WHERE category = '$where' ORDER BY visits ASC LIMIT $limit
但是我没有看到任何关于它的信息,所有这些信息都不一定有效,所以我试着写下我所有的分类:

$where = 'action OR category = adventure OR category = comedy OR category= scifi';
$limit = '16';
SELECT * FROM posts WHERE category = '$where' ORDER BY visits ASC LIMIT $limit
但它不起作用,因为我需要在类别名称中使用“”,但在我的示例中如何做到这一点

如何在我的类别中使用引号:

$where = 'action OR category = adventure OR category = comedy OR category= scifi';
此示例的完整代码:

if($type == 'action'){
    $limit = '0,3';
    $where = "category = 'action'";
}
else if($type == 'adventure'){
    $limit = '0,5';
    $where = "category = 'adventure'";
}
else if($type == 'comedy'){
    $limit = '0,3';
    $where = "category = 'comedy'";
}
else if($type == 'scifi'){
    $where = "category = 'accao' OR category = 'adventure' OR category = 'comedy' OR category = 'scifi'";
    $limit = '16';

}

$posts=
mysql_query("SELECT * FROM posts WHERE '$where' ORDER BY visits ASC LIMIT $limit")
or die(mysql_error());

如果你对每一个类别都做了定义,那么就不要定义WHERE。容易的。此外,它不起作用,因为每个值都缺少单引号

没有定义在何处不进行比较,因此将返回每一行

SELECT * FROM posts ORDER BY visits ASC LIMIT $limit
此外,修复了我误解您时的代码:

$where = "category = 'action' OR category = 'adventure' OR category = 'comedy' OR category= 'scifi'";
$limit = '16';
$sql = "SELECT * FROM posts WHERE $where ORDER BY visits ASC LIMIT $limit";

首先,如前所述,如果所有可能的值都正常,那么为查询设置条件是没有意义的

其次,我为您的代码添加了一个可能的改进:

<?php

$genres = array(
    "action" => "0,3",
    "adventure" => "0,5",
    "comedy" => "0,3",
    "scifi" => "16"
);

$type = "action";

if(!in_array($type, array_keys($genres))) {
    //handle invalid input
}

$query = sprintf("SELECT * FROM `posts` WHERE `category` = '%s' LIMIT %s", $type, $genres[$type]);
echo $query;

?>

谢谢,但是对于您的解决方案,我有一个错误:您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“action”或category='adventure”或category='Comicle'或category='scifi'附近使用的正确语法。我将我的问题更新为我的完整代码,以了解我遇到的问题,也许更容易看到发生了什么!您可能应该花一些时间阅读SQL server的文档。这需要一点时间,但在未来你将节省更多的时间,而不是浪费时间发明完全荒谬的东西。