[英]Do it on one query: What's the best way?
我正在構建一個 PHP5 應用程序,我需要列出其中的項目以及有關它們的所有相關信息。 為此,我有三個表,分別命名為: kc_projects 、 kc_project_members和kc_users 。 我在所有這些中都有 ID,並且在kc_project_members的每一行中都有一列將相應的用戶鏈接到他注冊的項目。
現在,我有這個查詢:
SELECT * FROM kc_projects AS p
INNER JOIN kc_project_members AS pm
ON pm.PROJECT_ID = p.ID
INNER JOIN kc_users AS u
ON u.ID = pm.USER_ID
但它沒有按我的意願工作,因為它實際上檢索了我想要的結果,但不是以我想要的方式。 它創建一個數組和另一個數組,在該數組內我有另一個包含查詢結果的數組。 它還會為每個用戶創建一個重復的結果,這意味着如果我在該項目中只有一個用戶注冊,它只會返回一個項目。 但是如果我有更多,它會返回我 arrays 和注冊用戶一樣多,並且 arrays 始終具有相同的項目信息。 我希望他只返回一個項目,並在其中包含一個包含用戶的數組。
無論如何,正確的方法是這樣做的嗎?
謝謝,
燒焦
我假設 arrays 你的意思是結果集......
是的-這是可能的,但可能與您想象的不完全一樣,因為所有結果集必須具有相同的列數,如果您說... 2 個項目成員,ID 為 1 的項目,這是不可能的以及 5 個項目成員,用於 id 為 7 的項目。
您必須准確指定要返回的列 - SELECT *
不會解決問題(無論如何這是一件壞事,尤其是在需要良好性能的情況下)。 此外,用戶的 id、用戶名或您需要為每個項目的引用用戶獲取的任何列都必須連接在一個字符串中,稍后您應該使用 PHP 對其進行解析。
這是一個例子:
SELECT p.ID, p.PROJECT_NAME, GROUP_CONCAT(u.USERNAME SEPARATOR ',') AS PROJECT_MEMBERS
FROM kc_projects p
JOIN kc_project_members pm ON p.ID=pm.PROJECT_ID
JOIN kc_users u ON pm.USER_ID=u.ID
GROUP BY p.ID;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.