2016-08-04 64 views
0

我想連接三個表。輸出將如下所示:在table_1上首先獲得水果價格4,並且在table_2上排除任何帶有mark 6的水果,然後在table_3上排除水果因素匹配的果實,然後獲取val的值,如果不是,我仍然保持Val值爲NULL的水果。我正在考慮加入,但不太確定如何結合三張桌子來做我想做的事情。幫助,欣賞。試圖結合三個表基於我的情況MySQL的PHP​​?

<?php 
/* 
table_1 
fruit price 
apple 4 
banana 5 
pear 4 

table_2 
fruit mark 
apple 5 
banana 4 
pear  6 

table_3 
fruit factor val 
apple 56  good 
banana 89  good 
pear  56  bad 
*/ 
$sql = $wpdb->get_results($wpdb->prepare(" 
SELECT a.fruit, b.fruit, c.fruit, c.val 
FROM table_1 a, table_2 b, table_3 c WHERE a.price = %d AND b.fruit NOT IN 
(SELECT fruit FROM table_2 WHERE mark =%d) AND c.fruit = a.fruit OR c.factor = %d 
      ",$price,$mark,%factor)); 

foreach($sql as $sqls){ 
    $result1 = $sqls-> a.fruit; 
    $result2 = $sqls-> c.val;    
    $result[] = array($result1=>$result2); 
      } 

?> 
+1

您需要了解加入... https://www.sitepoint.com/understanding-sql-joins-mysql-database/ –

+0

首先,不需要把PHP代碼中一個片段。其次,很明顯你不熟悉JOIN。所以,如果有人回答你,下次你將無法做到。我強烈建議你瞭解JOIN,重構你的查詢,如果你還有什麼問題,請在這裏問。我們幫助你。 – Mojtaba

+0

如果您喜歡,請考慮遵循以下簡單的兩步式操作:1.如果您尚未這樣做,請提供適當的CREATE和INSERT語句(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry

回答

-1
SELECT 
a.fruit,b.mark,c.factor,c.value 
from table_1 a, 
left join table_2 b 
on b.fruit=a.fruit and b.mark != 6 
left join table_3 c 
on c.fruit=a.fruit 
+0

雖然這段代碼可以解決這個問題,但是[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高質量您的帖子。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要使用解釋性註釋來擠佔代碼,因爲這會降低代碼和解釋的可讀性! – FrankerZ

+0

@FrankerZ感謝下次會記住! –

相關問題