2014-02-14 143 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