我在理解如何让我的1到多PHP查询正确运行时遇到一些麻烦。
目前我在MYSQL数据库中有2个表
我有一个像这样的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";
答案 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。