一对多PHP查询

时间:2016-08-07 21:22:38

标签: php mysql

我在理解如何让我的1到多PHP查询正确运行时遇到一些麻烦。

目前我在MYSQL数据库中有2个表

  • DELI_ITEMS [Ingredient_Type,itemname]
  • DELI_ITEMS_QUANTITY [Ingredient_Type,Qty]

我有一个像这样的MYSQL查询:

$sql_deli_meat="SELECT * FROM deli_items,deli_items_quantity WHERE ingredient_type = 'deli_meat' ORDER BY sort ASC";

PHP查询

<?php while($rows=mysql_fetch_array($result_deli_meat)){ ?>

        <input type="checkbox" name="deli_meat[]" id="<? echo $rows['itemname']; ?>" value="<? echo $rows['label']; ?>"/>

        <select name="deli_meat[]">
        <option value="<? echo $rows['qty']; ?>"><? echo $rows['qty']; ?></option>
        </select>


    <?php } ?>

我尝试从 DELI_ITEMS 返回每个复选框输入,以在选择框中显示来自 DELI_ITEMS_QUANTITY 的数量项。两者都有一个名为&#34; Ingredient_Type&#34;

的公共字段

我如何调整我的MYSQL查询来显示这个?

我最初的想法是做类似下面的事情,但没有工作

$sql_deli_meat="SELECT * FROM deli_items JOIN deli_items_quantity ON deli_items.ingredient_type=deli_items_quantity.ingredient_type WHERE enabled = 1 AND deli_items.ingredient_type = 'deli_meat' ORDER BY sort ASC";

2 个答案:

答案 0 :(得分:2)

我认为你误解了mysql连接。

语法为:

**SELECT** {YOUR COLUMNS LISTED WITH ,} **FROM** {YOUR BASE TABLE (the ONE in your one to many) **INNER JOIN** {YOUR OTHER TABLE} **ON** {BASETABLENAME.column = OTHERTABLE.column}

因此,在您的示例中,您似乎没有任何主键和外键。让我们创建一些,实际上让整个例子变得更好。

DELI_ITEMS  [id, item_name]

INGREDIENTS [id, name]

DELI_ITEMS_INGREDIENTS [deli_item_id, ingredients_id, quantity]

现在你做了一些规范化。您的物品和配料的基本列表在分隔列表中,您有一个链接表,您可以在其中选择您的项目中的成分。数量存储在链接表中。

让我们看一下SQL的选择。

SELECT di.name 'item', i.name 'ingredient', dii.quantity
FROM deli_items di
INNER JOIN deli_items_ingredients dii  ON di.id= dii.deli_item_id
INNER JOIN ingredients i ON i.id = dii.ingredients_id

这将为您提供所有熟食项目和成分列表:

项目,成分,数量

为了解释上述情况,表名后面的字母是别名',以使查询更容易阅读。 INNER JOIN意味着我们必须在每个表中都有一条记录来显示结果。 ON语句告诉SQL要加入的标识列是什么。选择行中的引号是列的别名,这使得它更容易,因为在这个示例中两个表使用“name”。

现在,为了管理成分和数量,您只需更新一个表格,这样可以更轻松地管理数据。

-

网上有很多教程,这只是一个非常基本的例子。我建议你停下来,google并阅读一些关于SQL表,规范化和查询的关于youtube的内容。

然后查看“PDO”和“PARAMETRISED QUERIES”,如果您接受用户输入您的查询“SQL INJECTION”,然后再继续。

答案 1 :(得分:0)

尝试此查询

    SELECT * 
    FROM deli_items AS i
    JOIN deli_items_quantity AS q ON i.ingredient_type=q.ingredient_type 
    WHERE enabled = 1 AND i.ingredient_type = 'deli_meat' 
    ORDER BY i.ingredient_type ASC

无论如何,不​​清楚表格的外观,因为你没有指定你正在使用的列,如启用= 1 ...

也很高兴在MySql Workbench中测试查询,或者转储什么是php。