2016-11-14 66 views
0

我有一個包含兩種類型用戶的數據庫,用戶可以是individualorganization,它們是父用戶user的孩子,原因是我這樣做是因爲組織具有某個屬性individual沒有,不像有單個表,其中可以定義兩個用戶的所有屬性,並且必須有空字段,我決定創建一個user表,它具有兩種類型用戶之間的共同屬性,那麼有一列保留用戶類型,所以如果其1那麼用戶是個人,所以我必須在individual表中查看所有其他屬性,反之亦然,individualorganization表保持user foreign key具有它這裏認定是我的數據庫表 enter image description here使用CASE的SQL查詢問題

櫃面你想知道爲什麼我沒有做一個表,我打算增加更多屬性的用戶和組織表的應用增長的圖形表示,正在留有餘地擴展,所以這裏是我的問題,我想獲得一個用戶的數據,我已經有他們的ID,但我怎麼能檢查userType並指向下一組屬性的右表,例如,如果一個名爲John的用戶Id是2,並在個人表中,我如何得到他們的名字和姓氏?

我查詢的想法是這樣的:

Select users.email, users.profilePhoto, users.userSince, CASE WHEN userType = 1 THEN SELECT individual.fname, individual.lname WHERE users.id = 1 AND individual.userFK = 1 END FROM users 

,但我不熟悉的CASE發言,所以我總是得到一個錯誤,有人想幫誰,你是最歡迎的。

+0

https://dev.mysql.com/doc/refman/5.7/en/case.html – coder

+0

@coder我看過你的鏈接,其教育但現在我需要的是一個查詢,如果一個可以幫助,然後從那裏我會知道我要去哪裏錯了 –

+2

你不需要'Case'來做到這一點,使用['LEFT JOIN'](http://www.mysqltutorial.org/mysql-left-join。 ASPX)。 –

回答

1

你正在試圖建立在SELECT部分數據集,但SELECT部分僅用於改變輸出,而不是輸入,而不是建立一個數據集。

該數據集是使用WHERE語句與JOIN的交叉選擇組合生成的。

可以使用GROUP BY來完成聚合,但到目前爲止您並不需要這些。

SELECT 
      u.*, 
      i.*, 
      o.* 
    FROM users u 
LEFT JOIN individual i 
     ON i.userFK = u.userFK 
LEFT JOIN organization o 
     ON o.userFK = u.userFK 
0

我終於實現了這個

$userFk = $_POST['userFk']; 
$stmt = $conn->prepare("SELECT profilePhoto, userType FROM users WHERE id = ?"); 
$stmt->bind_param("s", $userFk); 
if($stmt->execute()) 
{ 
$user = $stmt->get_result()->fetch_assoc(); 
$userType = $user['userType']; 
if($userType == 1) 
{ 
    $stmt = $conn->prepare("SELECT fname, lname From individual WHERE userFk = ?"); 
    $stmt->bind_param("s", $userFk); 
    if($stmt->execute()) 
    { 
     $details = $stmt->get_result()->fetch_assoc(); 
     $user['fname'] = $details['fname']; 
     $user['lname'] = $details['lname']; 
    } 
}else if($userType == 3) 
{ 
    $stmt = $conn->prepare("SELECT name From organization WHERE userFk = ?"); 
    $stmt->bind_param("s", $userFk); 
    if($stmt->execute()) 
    { 
     $details = $stmt->get_result()->fetch_assoc(); 
     $user['organizationName'] = $details['name']; 

    } 
} 
} 
+0

當您通過增加不必要的開銷來規避問題時,您的學習曲線是平坦的。 – DanFromGermany

+0

@DanFromGermany好吧,如果人們不想幫忙,我可以做什麼,我的意思是這是我能想到的所有 –

+0

人們在評論中提供了幫助。不要使用'CASE',使用兩個LEFT JOINS,'ON users.userFK = individual.userFK'和組織表相同。 – DanFromGermany