PHP函数以表格关系

时间:2016-09-20 20:50:45

标签: php mysql database dynamic-programming

我需要一个PHP函数,它接受表或表以及这些db表中所需的列,并返回包含数据的html表。我知道如何为一张桌子做这件事,但我正在努力使这个更有活力

我对一个表的想法是有一个函数,它接受表名,然后是一个列数组,然后只是从表中选择数据,然后循环遍历它,将数据构造为html,然后从中返回功能

作为一个例子,我的数据库有两个表;用户和订单

users
|----------------------------|
|user_id|first_name|last_name|
|-------|----------|---------|

orders
|----------------------|
|order_id|user_id|total|
|--------|-------|-----|

现在使用上面讨论的功能,可以很容易地为所有用户或订单生成一个表,但我想要做的是有一个功能,我可以动态连接表和,例如列出所有用户及他们所做的订单数量或列出来自用户x的所有订单。我知道这可以通过许多不同的功能实现,但我真的很想开发一种动态执行此操作的方法,并基本上在程序中构建所有关系以某种方式然后能够调用一个函数和请求列x,y和z

到目前为止,我的想法(再次针对此示例)以某种方式定义number of orders for user i = count(order_id) where user_id = i

希望这是有道理的,并提前感谢你

3 个答案:

答案 0 :(得分:2)

INFORMATION_SCHEMA.KEY_COLUMN_USAGE表可用于查找从特定表到其他表的所有外键关系,例如:

SELECT `TABLE_NAME`,
       `COLUMN_NAME`,
       `REFERENCED_TABLE_NAME`,
       `REFERENCED_COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`
WHERE `TABLE_SCHEMA` = SCHEMA() -- current schema
  AND `REFERENCED_TABLE_NAME` IS NOT NULL
  AND `TABLE_NAME` = 'orders'; -- name of table to get relationships to other tables

这应该返回如下内容:

+--------------+-------------+-----------------------+------------------------+
| TABLE_NAME   | COLUMN_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+--------------+-------------+-----------------------+------------------------+
| orders       | user_id     | users                 | user_id                |
+--------------+-------------+-----------------------+------------------------+

以上可以在PHP中完成,然后可以迭代结果以动态构造一个查询,从这些表中选择,连接列出的列。将该部分留作练习; - )

答案 1 :(得分:1)

您不需要创建一个函数来从第一个表中获取数据然后循环它们并从第二个表中获取数据。
SQL可以通过数据库命中1来为您完成此任务 您需要做的就是加入两个表,并获取您想要的数据.. 如果我理解你需要什么,你想从第一张表中获取所有用户ID,并从第二张表中获取他们的订单数量。
一个简单的连接或从两个表中选择都可以做到这一点,我建议如下:

Select a.user_id, b.count(order_id) 
FROM table1 as a, table2 as b 
WHERE a.user_id = b.user_id 
Group By a.user_id

或者您可以加入表格并执行类似的任务 我假设你要从PHP代码访问数据库,所以试试看,然后给我反馈。

答案 2 :(得分:1)

这很容易实现,但我们必须解决一些问题。 我们的要求: 1.根据列名识别表。 2.我们如何加入这些表格。 3.如何解决列的歧义。

解决方案:

每个字段的唯一列名称或没有表具有重复的列名称。 为了实现它,我们应该为每个表都有固定表前缀。 例如: 您的列名可以是odr_orderid和usr_orderid。

现在,通过识别唯一的前缀,我们可以识别表格。

现在出现了如何加入这些表的问题

解决它: 创建另一个表强JOIN键和JOin类型左,右,内或全。

多数通道现在您可以根据需要进行查询。