sql查询where子句中的多个条件

时间:2013-04-19 16:41:03

标签: php sql

我试图在单个where子句中为多个条件设置回声...如果找到此值,则回显某些内容...如果找到另一个值,则回显某些内容... 我的代码当前只响应表中的所有数据,只是根据特定字段中存储的值回显一组特定的数据...

<?php
$query = mysql_query("SELECT *
    FROM   tblfoodoptions JOIN tblhealthconditionfoods 
        ON tblfoodoptions.FoodID = tblhealthconditionfoods.FoodID, tblhealthcondition                                
    WHERE  tblhealthconditionfoods.HealthconditionID = tblHealthcondition.HealthconditionID 
    AND tblhealthcondition.Healthcondition IN ( 'Diabetes Type1' OR 'Diabetes Type2' OR 'General Health' OR 'Pregnant' OR 'Anemia' OR 'High Cholesterol')");

{
    echo "<table width='100%' border='4'>
            <caption>Your Food Options</caption>
            <thead>
                <tr>
                    <th>FoodName</th>
                    <th>Serving_Size</th>
                    <th>Calories</th>
                    <th>Cholestrol</th>
                    <th>Sodium</th>
                    <th>Protein</th>
                    <th>Total_Carbohydrates</th>
                    <th>Total_Fat</th>
                </tr>
            </thead>
        <tbody>";

        while($row = mysql_fetch_array($query))
        {
            echo "<tr>";
            echo "<td>".$row['FoodName']."</td>";
            echo "<td>".$row['Serving_Size']."</td>";
            echo "<td>".$row['Calories']."</td>";
            echo "<td>".$row['Cholesterol']."</td>";
            echo "<td>".$row['Sodium']."</td>";
            echo "<td>".$row['Protein']."</td>";
            echo "<td>".$row['Total_Carbohydrates']."</td>";
            echo "<td>".$row['Total_Fat']."</td>";
            echo "</tr>";
        }
        echo "</tbody></table>";
    }       
?>

4 个答案:

答案 0 :(得分:1)

IN ( 'Diabetes Type1' OR 'Diabetes Type2' OR 'General Health' OR 'Pregnant' OR 'Anemia' OR 'High Cholesterol')

这部分应该是

IN ( 'Diabetes Type1', 'Diabetes Type2', 'General Health', 'Pregnant', 'Anemia', 'High Cholesterol');

答案 1 :(得分:0)

您的IN子句不正确。您没有OR这些值,只需列出它们:

... something IN (1,2,3,4,5)

答案 2 :(得分:0)

IN条件中的

值与许多值除以OR表达式相同

所以

where field = 10 OR field = 20 OR field = 30 
where field IN (10,20,30)

这两行都很相似

答案 3 :(得分:0)

首先,我只需要指出您的数据库设置不是您想要查询结果的理想选择(选择)。您正在使用关系数据库...使用关系。我不是建议您不要在表上使用连接,但是您可以通过使用1:many关系将数据放在相关位置的方式重新组织数据库结构。

除此之外,您正在使用PHP来获取或存储数据......让程序进行思考,而不是数据库。让数据库连接数据或以其他方式不必要地对表或数据进行连接会打开你的二级SQL注入(这是非常讨厌的,你看不到它),但更糟的是你改变了存储的数据。 PHP有许多注意事项可供您以简洁和相关的方式组织数据。使用包装器将患者的数据拉入对象或阵列,然后将您的食物选择或关于所述病症的其他医疗信息提取到多维arraylist

$foods = array(
                "Ritz Crackers" => array("serving" => "6 crackers", "calories" => 42 ...),
                "Yoplait Vanilla Yogurt" => array("serving" => "2oz", "calories" => 22, ...),
                );

该数据不是真实数据,只是一个关于如何使用数组列表的示例。

一旦你的程序从数据库中提取数据,你就可以在PHP中使用OOP甚至程序编程将数据组织成可显示的报告,并根据需要编写。这使您可以自由地将数据库中的数据简化为代码,尽可能将PHP程序代码知道什么转化为什么。这将使您的数据库工作更少,并且让您可以自由地操作所需的数据,而不会弃用,截断或破坏或破坏数据库中的数据。

网上有很多关于PHP,SQL和MySQL的教程和手册页,只要在最小的范围内准确询问你需要做什么,你通常会找到让你感动的答案。