【问题标题】:PHP, SQL: How to use WHERE field in Query to get multiple values?PHP,SQL:如何在Query中使用WHERE字段来获取多个值?
【发布时间】:2019-08-12 18:53:02
【问题描述】:

我有一个按日期排列的芒果、苹果和橙子价格数据库。

我想按 ID 过滤表格中的价格。我可以使用一个 ID 过滤结果,并将它们显示在表格中。

如何在 SQL 中使用 WHERE 过滤多个 ID 值,并以表格形式显示结果数据?

<table style="float:left;">
  <tr>
    <th>Mango </th>
    <th>Apple</th>
    <th>Orange </th>
    <th>Date</th>

  </tr>
  <?php
  $dbhost ="localhost";  // hostname
  $dbuser="root"; // mysql username
  $dbpass="****"; // mysql password
  $db="****"; // database you want to use
  $conn= mysqli_connect( $dbhost, $dbuser, $dbpass, $db ) or die("Could not connect: " .mysqli_error($conn) );
  $sql = "SELECT MANGO, APPLE, ORANGE, DATE FROM dataTable WHERE ID='3' ORDER BY Date DESC LIMIt 1";
  $result = $conn->query ($sql);
  if($result ->num_rows>0){
    while($row = $result ->fetch_assoc()){
      echo "<tr><td>". $row["MANGO"]."</td><td>".$row["APPLE"]."</td><td>".$row["ORANGE"]."</td><td>".$row["DATE]."</td> </tr>";
    }
    echo "</table>";
  }else {echo "0 result";}
  $conn->close();
   ?>
</table>


【问题讨论】:

  • "如何传递多个ID,获取不同表中的数据?"表或列?后者似乎更有可能,但你要求前者,所以我想我会检查。
  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…") 程序接口是 PHP 4 时代引入的mysqli API 的产物,理想情况下不应在新代码中使用。您在这里不一致地使用这两个接口。只使用一个和一个。

标签: php html mysql sql database


【解决方案1】:

考虑使用IN 运算符使用ID 值序列进行过滤。

例如,如果您想获得ID=1ID=2ID=3 的结果:

$sql = "SELECT MANGO, APPLE, ORANGE, DATE FROM dataTable WHERE ID IN (1,2,3) ORDER BY Date DESC";


请参阅Select Multiple Ids from a table,了解更多信息。

您还可以查看有关 IN 运算符here 的更多信息。

【讨论】:

    【解决方案2】:

    你可以这样做 SELECT MANGO, APPLE, ORANGE, DATE FROM dataTable WHERE ID='3' OR ID='4',你可以添加任意数量的ORs

    【讨论】:

    • 但是如何获取不同的表呢?它会在同一张表中添加一个新行吗?我想为不同的 ID 获取不同的表。
    • 这是什么意思?新建html表还是数据库中的表?
    • 不在数据库中。我想显示结果。例如 ID=1 应该给出一个包含 3 列(MANGO、APPLE、ORANGE)和 1 行(价格)的表。同样, ID=2 应该给出另一个表。我想把桌子并排排列。
    • 我需要查看数据库结构才能做到这一点
    • ID 行=(1 3 7 1 3 7 1 3 7 1 3 7 .........) 日期行=( 21.03.2019 20.03.2019 19.03.2019... .....)苹果行=(5 3 6 5 3 2 ....)芒果行=(1 2 1 3 2 ........)橙色行=(1 2 3 5 6 2......) 这是结构。我想获取每个 ID 的价格,但要获取最新日期。 ID=1 的表格,其中包含每个项目的最新日期和相应价格。 ID=3,每个项目的最新日期和相应的价格。 ID=7,每件商品的最新日期和相应价格。
    【解决方案3】:

    你的桌子设计坏了。果实不应该是柱子。

    数据库喜欢它们的数据很好地分离,通过内部键(主键,外键)表示关系。如果您这样做,即使您存储了数十万条记录,他们也会非常快速且可靠地找到它。

    table "fruits"
    id | name
     1, 'Mango'
     2, 'Orange'
     3, 'Apple'
    
    table "fruits_date_prices"
    id | fruit_id | price | date   
     1, 1, 1.30, '2019-03-20'
     2, 1, 1.35, '2019-03-21'
     3, 1, 1.37, '2019-03-22'
     4, 2, 0.87, '2019-03-20'
     5, 2, 0.86, '2019-03-21'
     6, 2, 0.84, '2019-03-22'
     7, 3, 0.34, '2019-03-20'
     8, 3, 0.36, '2019-03-21'
     9, 3, 0.35, '2019-03-22'
    

    使用 JOIN 查询一天的价格(例如“一次调用两个表”):

    SELECT
        f.name AS fruit,
        fdp.price 
    FROM 
        fruits AS f
    LEFT JOIN
        fruits_date_prices AS fdp ON f.id = fdp.fruit_id
    WHERE
        fdp.date = '2019-03-21'
    

    希望能有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多