2016-12-23 57 views
2

像頭說的,試圖使用mysql和pdo在php中創建好友列表。 有三個表,一個用戶和一個朋友以及一個細節在php/pdo中創建一個朋友列表和三張表

用戶: ID 用戶名

好友: 用戶ID friendID 狀態

詳情: profileImg

foreach($db->query('SELECT * FROM FF_Users 
LEFT JOIN FF_User_Details ON FF_User_Details.user_id = FF_Users.id 
LEFT JOIN FF_UserRoles ON FF_UserRoles.user_id = FF_Users.id 
LEFT JOIN FF_ZIP_nb_NO ON FF_ZIP_nb_NO.Postnummer = FF_User_Details.zip 
LEFT JOIN FF_User_Settings ON FF_User_Settings.user_id = FF_Users.id 
INNER JOIN FF_MyFriends ON ((FF_MyFriends.user_id = FF_Users.id AND FF_Users.id) OR (FF_Users.id = FF_Users.id AND FF_MyFriends.user_id)) 
GROUP BY FF_Users.id') as $row) { 
if ($isFriends) { 
    echo '     <button type="button" class="btn btn-primary btn-xs pull-right read-only">'; 
echo '      <i class="fa fa-user"> </i> ' . USERS_ADD_FRIEND; 
echo '     </button>'; 
} else { 
echo '     <button type="button" class="btn btn-primary pull-right btn-xs read-only disabled">'; 
echo '      <i class="fa fa-user"> </i> ' . USERS_IS_FRIEND; 
echo '     </button>'; 
} 
} 

我在這裏做錯了什麼?一遍又一遍地只有空白的白頁。

感謝所有幫助:)

+0

首先,檢查你的錯誤日誌,那裏可能有有用的線索。接下來,由於我們沒有完整的代碼,試着對你的'$ db-> query()'結果執行一個'var_dump':可能查詢本身不是問題,但代碼的其餘部分是。 – SolarBear

+0

@SolarBear - 不是我理解var_dump中的任何東西,它說:object(PDO)#2(0){},對於其他缺少的代碼,只是將數據回顯出來,因爲它很多html頁面不會讓我發佈所有內容。但我會更新它是正確的db->查詢,所以你會看到我正在嘗試做什麼。以爲我的帖子是最簡單的解釋方式:) – KommerSnart

回答

0

您的評論對var_dump顯示object(PDO)#2 (0) { }讓我相信你的查詢根本不返回任何數據。

我不能完全肯定這是你的問題,因爲我沒有訪問您的數據,但此行看起來可疑對我說:

INNER JOIN FF_MyFriends ON (
    (FF_MyFriends.user_id = FF_Users.id AND FF_Users.id) 
    OR 
    (FF_Users.id = FF_Users.id AND FF_MyFriends.user_id) 
) 
  1. 首先,你的條件是奇形怪狀。
    1. 在第一部分中,您將比較FF_MyFriends.user_id = FF_Users.id(看起來確定),然後AND FF_Users.id看起來很奇怪。如果你想確保FF_Users.id不是NULL,我建議你明確地檢查它(AND FF_Users.id IS NOT NULL)。
    2. 在第二部分中,您將比較FF_Users.id = FF_Users.id,根據定義它將返回true。 :)
  2. 您在其他表格上使用LEFT JOIN,但在該表格上使用INNER JOIN可能意味着沒有找到匹配的朋友,並且數據庫因爲沒有完成匹配而僅僅返回任何內容。

我建議你a)重新考慮你是否需要INNER JOIN和b)清理你的連接條件。

我在這裏猜測,但它看起來像你試圖從任何方向獲取所有用戶的朋友(即檢查用戶A是否是B或B的朋友是一個)。如果是這樣的情況,請嘗試:

SELECT DISTINCT * 
-- etc. 
INNER JOIN FF_MyFriends ON 
    FF_Users.id = FF_MyFriends.friendID 
    OR FF_Users.id = FF_MyFriends.userID 

DISTINCT很重要,因爲如果A是B和A的B的朋友,你會在同一行結束了兩次。

我希望它有幫助。如果它不是您所需要的,請準確地添加關於您需要的評論。

+0

謝謝你花時間幫助我。 讓我解釋一下這個頁面需要什麼,一個登錄到系統的用戶,想要列出網站上的所有成員。在這個用戶列表中,他們看到一個像圖像,位置,年齡,生日等v卡的東西,如果不是朋友或朋友請求按鈕,如果已經是朋友請求按鈕。所有這些左連接從單獨的表格,用戶詳細信息,郵政編碼,用戶設置,用戶信息獲取數據,並希望嘗試獲得朋友列表bot不是朋友的朋友。解釋更好? (希望) – KommerSnart

+0

它現在輸出每個用戶現場,但如果試圖打印出用戶/朋友數據,每個成員打印出相同的數據。我可能認爲我不得不重新考慮漏洞SQL請求是... – KommerSnart