使用介于,最小和最大之间的问题

时间:2014-12-08 08:10:15

标签: php mysql mysqli

我创建了一个目录,其中包含一系列年份字符搜索功能以及我分配给他们的年份。因此,从1940年到1949年的任何事情都将出现在1940年的时间段内,依此类推。我正在使用href对这些时间帧进行分组。

<?php

$sql = "SELECT * FROM catalog";

$displayby = $_GET['displayby'];
$displayvalue = $_GET['displayvalue'];

if($displayby && $displayvalue){
    $sql = "SELECT * FROM catalog WHERE $displayby LIKE '$displayvalue'";
}
if($displayby == 'year'){
    $min = $_GET['min'];
    $max = $_GET['max'];
    $sql = "SELECT * FROM catalog WHERE year BETWEEN '$min' AND '$max'";
 }
//$result = mysqli_query($con,$sql);
$result = mysqli_query($con,"SELECT * FROM catalog WHERE year BETWEEN '$min' AND '$max'");
    while($row = mysqli_fetch_array($result)){
        $name = $row['name'];
        $filename = $row['filename'];
        $cid = $row['cid'];

        echo "\n<div class=\"holder\">";
        echo "<a href=\"single.php?cid=$cid\"><img src=\"thumbs/$filename\"></a>";
        echo "<a href=\"single.php?cid=$cid\">$name</a><br />\n";
        echo "</div>";
    }
?> 

这个href只能在那些年内调出某些角色:

<a href="index.php?displayby=year&min=1940&max=1949">40's Villans</a><br/>

然而,它们在前几年出现了 - 可能是1945年作为角色的设定日期,但它们只出现在1930年的链接中。

我做错了什么?  编辑:这是表SQL table

2 个答案:

答案 0 :(得分:2)

BETWEEN ... AND ....可用于整数和字符串。这样:

BETWEEN 1 AND 3

对于1,2和3都是如此。但是:

BETWEEN 'a' AND 'c'

对于'a','b'和'c'都是如此。

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

你在数字周围加上引号,将它们变成字符串。因此,对字符进行比较,而不是数字。

删除引号应该会有效。

$result = mysqli_query($con,"SELECT * FROM catalog WHERE year BETWEEN $min AND $max");

但正如其他人所说,代码还有很多其他问题。这个错误是一个不知道自己在做什么的人的症状。为什么不从头开始,拿一本好书。阅读。做例子。实验。成为一名流利的程序员可能需要数年时间。 (这意味着生气,而不是批评。)

答案 1 :(得分:-1)

而不是在两者之间使用,您也可以使用以下语句获取所需数据,如下所示

$sql = "SELECT * FROM catalog WHERE year >= '$min' AND year <='$max'";

并且在phpmyadmin中,您可以运行查询以确保获取正确的数据,之后您可以检查代码的显示位置

我希望它有助于你......