繁体   English   中英

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

[英]sql query for multiple conditions in the where clause

我试图在单个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>";
    }       
?>
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');

您的IN子句不正确。 您不将值进行OR ,仅列出它们:

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

IN条件下的值与许多除以OR表达式的值相同

所以

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

这两条线都是相似的

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

最重要的是,您正在使用PHP获取或存储数据...让程序进行思考,而不是数据库进行思考。 让数据库连接数据或以其他方式不必要地在表或数据上进行联接可以使您按第二顺序进行SQL注入(这很讨厌,您看不到它来了),但是更糟糕的是您更改了存储的数据。 PHP有许多警告可供您使用,以简洁而相关的方式组织数据。 使用包装器将患者的数据提取到对象或阵列中,然后将关于所述疾病的食物选择或其他医疗信息提取到多维阵列列表中

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

该数据不是真实数据,仅是有关如何利用阵列列表的优势的一个示例。

一旦您的程序从DB中提取数据,就可以使用OOP甚至PHP中的过程编程将数据组织为可显示的报告,并根据需要编写。 这使您可以自由地将数据库中的数据简化为可能的代码,PHP程序代码知道将哪些内容转换为什么。 这将使您的数据库工作量大大减少,并为您提供了处理所需数据的所有自由,而不会弃用,截断或破坏或破坏数据库中的数据。

网上有很多包含PHP,SQL和MySQL的教程和手册页,只问您需要以最小的规模做些什么,通常您会找到使您前进的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM