mysql - MySQL 中的数据检索

标签 mysql sql select

我想从表中检索一些年龄在特定范围内的数据。

示例

年龄在20岁至30岁之间的人士。我该怎么做?我尝试使用以下查询,但无法得到它。

$age="SELECT * 
    From    rec_patient_reg
    WHERE   p_age  >='$afrom' <= '$to'";
    $result1=mysql_query($age) 
    or die(mysql_error());
    while($result = mysql_fetch_array($result1)) {
    echo "<b>Patient ID</b> = " .$result["Patient_id"] . " <br>";
    echo "<b>NAME</b> = ".$result["p_fname"]."<br><br>----------------<br><br>"; 

请帮助我。

最佳答案

我敢打赌,由于您使用的是 mysql,因此您不会收到任何错误消息。看看下面这个例子,

SELECT *
FROM   tableName
WHERE  Age  >= 20 <= 25

这在任何其他 RDBMS 上都是不允许的,但 MySQL 允许。它的作用是隐式允许在过滤器的最右侧使用 bool 表达式,例如

SELECT *
FROM   tableName
WHERE  (Age  >= 20) <= 25

因此,在本例中,该值现在被解析为(假设 Age = 5)

WHERE  0  >= 25 

导致您检索到意外结果。

<小时/>

如果您想搜索范围,可以使用BETWEEN

SELECT * 
From    rec_patient_reg
WHERE   p_age  BETWEEN '$afrom' AND '$to'

作为旁注,该查询容易受到 SQL Injection 的影响。如果变量的值(s)来自外部。请查看下面的文章,了解如何预防这种情况。通过使用 PreparedStatements,您可以摆脱在值周围使用单引号的情况。

关于mysql - MySQL 中的数据检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15727478/

相关文章:

sql - 将任意 SQL SELECT TOP(x) 转换为 SELECT COUNT(*)?

mysql - 除了通配符之外,在 mysql select 语句中使用星号 (*) 意味着什么?

mysql - 特定字段更新时的时间戳

基于 View 或三表查询的 MySQL 数据透视

sql - 在 VARCHAR 列上创建 INT 索引

MySQL 不在 SELECT ... ORDER BY 查询中使用主键。为什么?

MYSQL 查询 - 按月获取总计并显示零总计

MySQL - 为什么这两个查询中时间戳的性能如此不同?

php - 重定向到登录页面,除非用户已登录

sql - MSSQL2000 : get list of role members