2014-02-14 144 views
0

我目前所面對的是從law_case大小寫相匹配![在這裏輸入的形象描述] [1]使用INNER JOIN/JOIN多個查詢

$query1 = "SELECT * FROM law_case WHERE id =?"; 
$query1vals = array($_GET['id']); 
$ids = $adb->selectRecords($query1, $query1vals, false); 
$a = $ids['case_type_id']; 
$b = $ids['funding_pref']; 
# 
$query2 = "SELECT type_name FROM case_type WHERE id =?"; 
$query2vals = array($a); 
$ids1 = $adb->selectRecords($query2, $query2vals, false); 
$d = $ids1['type_name']; 
# 
$query3 = "SELECT * FROM expertise WHERE expertise_desc =?"; 
$query3vals = array($d); 
$ids2 = $adb->selectRecords($query3, $query3vals, false); 
$c = $ids2['id']; 
# 
$query4 = "SELECT * FROM individual_expertise WHERE expertise_id =?"; 
$query4vals = array($c); 
$ids3 = $adb->selectRecords($query4, $query4vals, false); 
$e = $ids3['individual_id']; 
# 
$query5 = "SELECT * FROM individual WHERE id =?"; 
$query5vals = array($e); 
$ids4 = $adb->selectRecords($query5, $query5vals, false); 
$f = $ids4['network_member_id']; 
# 
$query6 = "SELECT * FROM network_member WHERE id =?"; 
$query6vals = array($f); 
$ids5 = $adb->selectRecords($query6, $query6vals, false); 

而且它做什麼它也只得到一個network_member。 我想使用INNER JOIN,JOIN或LEFT JOIN,並使用一段時間來獲取每個network_member的不同member_name和url,或者誰的個人擁有與individual_expertise表相同的expertise_id。

我是新來JOIN和嘗試這種代碼,但它不工作:

$sql = "SELECT member_name, url 
FROM individual_expertise 
LEFT JOIN individual 
USING (individual_id) 
LEFT JOIN network_member 
USING (network_member_id) 
WHERE expertise_id = ?"; 
$ids3 = $adb->selectRecords($sql, $query4vals, false); 

echo $ids3['member_name']; 
+0

因爲你是新來的加入,你知道哪些加入您需要使用您的具體情況? INNER JOIN,LEFT JOIN ..等等。我建議你仔細閱讀一下Joins,找出你的情況需要什麼。你可以從這裏開始:http://dev.mysql.com/doc/refman/5.0/en/join.html和在這裏:http://www.w3schools.com/sql/sql_join.asp – wribit

回答

0

你需要得到JOIN類型的概述。您必須使用INNER, LEFT, RIGHT, FULL連接根據您的邏輯要求構建查詢。您可以假設INNER加入等於&&AND運算符在條件語句中,我的意思是記錄必須匹配在兩個表中。 雖然,LEFT連接將返回連接的左表中的所有行,並從連接的右表中匹配匹配的行。 RIGHTLEFT相反。 和FULL連接是條件語句中運算符的||OR的示例。我的意思是在兩個表中都有一個匹配。 所以你必須加入取決於你需要的邏輯。

See here

1

你知道JOIN和LEFT JOIN INNER之間的區別?我想你不會。你需要一個INNER JOIN在這裏。

我認爲這是對你的問題的解決方案:

SELECT 
    network_member.member_name, 
    network_member.url 
FROM 
    network_member 
INNER JOIN 
    individual ON individual.network_member_id = network_member.id 
INNER JOIN 
    individual_expertise ON individual_expertise.individual_id = individual.id 
WHERE 
    individual_expertise.expertise_id = ? 
+0

這是一個好主意,生病嘗試用WHERE循環,看看它是否得到不同的網絡成員:) –

+0

似乎只有一個網絡成員。 –

+0

我不使用任何GROUP BY子句。你確定有不止一個成員?你使用while循環來讀取查詢嗎? – Reeno