簡體   English   中英

PHP函數用於將數據從數據庫返回為具有表關系的表

[英]PHP function to return data from database as table with table relationships

我需要一個PHP函數,它接受表或表以及這些db表中的必需列,並返回包含數據的html表。 我知道如何為一張桌子做這個,但我正在努力使這個更有活力

我對一個表的想法是有一個函數,它接受表名,然后是一個列數組,然后只是從表中選擇數據,然后循環遍歷它,將數據構造為html,然后從函數返回。

作為一個例子,我的數據庫有兩個表; 用戶和訂單

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

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

現在使用上面討論的功能,可以很容易地為所有用戶或訂單生成一個表,但我想要做的是有一個函數,我可以動態地連接表, 例如列出所有用戶和他們的訂單數量'已制作或列出來自用戶x的所有訂單。 我知道這可以通過許多不同的函數實現,但我真的很想開發一種動態的方法,基本上在程序中以某種方式構建所有關系,然后能夠調用一個函數並請求列x,y和ž

到目前為止,我的想法是(再次為這個例子)以某種方式定義number of orders for user i = count(order_id) where user_id = i

希望這是有道理的,並提前感謝你

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中完成,然后可以迭代結果以動態構造一個查詢,從這些表中選擇,連接列出的列。 將該部分作為練習;-)

您不需要創建一個函數來從第一個表中獲取數據然后循環它們並從第二個表中獲取數據。
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代碼訪問數據庫,所以試試,然后給我回復你的反饋。

這很容易實現,但我們必須解決一些問題。 我們的要求:1。根據列名識別表。 2.我們如何加入這些表格。 3.如何解決列的歧義。

解:

每個字段的唯一列名稱或沒有表具有重復的列名稱。 為了實現它,我們應該為每個表都有固定表前綴。 例如:您的列名可以是odr_orderid和usr_orderid。

現在通過識別唯一的前綴,我們可以識別表格。

現在出現了如何加入這些表的問題

解決它:創建另一個表強JOIN鍵和JOin類型左,右,內或完整。

這就是所有現在您可以根據需要進行查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM