2014-03-03 82 views
0

我要表。如何使用一條SQL語句從兩個表中獲取信息?

第一個(成員)包含我的客戶 ID |名稱|電子郵件|關鍵

第二個(種)包含列表客戶訂閱 ID | CUSTOMER_ID |類型|活躍

我想要做的是列出所有訂閱了某種列表的成員。 我可以用2個sql:s來做到這一點,但我想如果加入maby,並且我的客戶按照我的方式得到了錯誤的ORDER,那麼我認爲必須有更好更快的方式來使用som類型。我想要通過名字命令。

<? 
$type ='555'; 
$sql = mysql_query(" SELECT * FROM types WHERE type='$type' && active='1' "); 
while($a = mysql_fetch_array($sql)) 
{ 
    $sql2 = mysql_query(" SELECT * FROM members WHERE id='{$a['customer_id']}' ");  
    while($b = mysql_fetch_array($sql2)) 
    { 
    echo 'Name: '.$b['name'].'<br>'; 
    } 
} 
?> 
+1

是的,你可以做到這一點與JOIN,你試過嗎? – chrki

+0

YES @ user1781026我確實嘗試了很多變化,沒有運氣 – user3214817

回答

2
mysql_query(" SELECT * FROM types INNER JOIN members ON types.customer_id = members.id WHERE type='$type' AND active='1' ORDER by members.name ASC"); 

這應該做的伎倆你

+0

是的,我抓住了,有點分心。謝謝! – Chitowns24

2
SELECT * FROM members 
JOIN types ON members.id = types.customer_id 
WHERE types.type = ? AND types.active = '1' 
ORDER BY members.name 
+0

謝謝。我沒有得到正確的結果,但你的代碼使我正確的方式,所以我必須trix arround一點:) – user3214817

+0

對不起,不是一個PHP開發,但你有一個SQL問題。我確實錯過了原始PHP代碼中的t.active。 – AaronM

+0

此外,我拒絕在查詢中鍵入$ type,因爲這是整個安全性的創建,並且如果類型來自url參數,將會在您的網站上啓用SQL注入攻擊。你應該總是使用參數化查詢,使用PHP不是理由,我寫了足夠的PHP知道你可以傳遞參數,即使沒有人蔘與。這就是爲什麼PHP是迄今爲止最大的被利用語言之一。非參數化查詢也會中斷查詢緩存並降低性能。 – AaronM

1

也許這:

SELECT m.name, m.email 
    FROM members m left join types t 
    ON m.id=t.customer_id 
    WHERE t.type='$type' and t.active='1';  
相關問題