2011-01-30 104 views
0

因此,用戶從下拉列表中選擇一個值。我把這個值,把它放到一個變量中,然後從數據庫中選擇該表A的ID值也保持選定的值。我該如何比較PHP中的這些數據庫值?

所以,現在我試圖使用該ID值來獲取多表關係表,它具有從表A選擇的值到不同的表B.多對多關係表具有兩個標識。我怎樣才能比較這使用PHP?

所以它會像:

$A = $_POST['a']; 
$sql = "SELECT a, aID from TABLEA WHERE a = $A"; 

我該怎麼辦,然後進行比較與許多一對多的關係表中的援助,然後在表中獲取其他ID,然後取該ID來從表B中獲取值?

+0

請不要用連詞開始句子。 – symcbean 2011-01-31 16:14:04

回答

1

您可以在您的SQL聯接做到這一點:

SELECT table_b.* FROM ab_association 
LEFT JOIN table_b ON table_b.id = ab_association.b_id 
WHERE ab_association.a_id = $specified_id; 

這假定你的許多一對多連接表被稱爲ab_association,有兩列,一個叫a_id對應於table_a.id,和b_id,對應於table_b.id

更新:我刪除了表名別名,因爲他們似乎讓你感到困惑。

另一個更新:在PHP中,這裏是你如何做到這一點(沒有業務邏輯):

<? 

// connect to db here 
$a_id = mysql_real_escape_string($_POST['a_id']); 
$result = mysql_query("SELECT table_b.* FROM ab_association LEFT JOIN table_b ON table_b.id = ab_association.b_id WHERE ab_association.a_id = $a_id;"); 

// in your view/template 
while(false !== (mysql_fetch_object($result))) { 
    // build your output for each row 
} 

?> 
+0

b。*應該代表什麼?我在這裏有點困惑,你能按照你試圖溝通的順序顯示這段代碼嗎?這看起來不像我在比較aID嗎? – Dan 2011-01-30 15:34:20

+0

這是`table_b`的別名。注意`table_b b`。這是`table_b AS b`的簡寫方式。 – coreyward 2011-01-30 15:38:06

0
SELECT * 
FROM table_a 
LEFT JOIN ab_association ON table_a.aID = ab_association.aID 
LEFT JOIN table_b ON table_b.bID = ab_association.bID 
WHERE table_a.a = $A 

注:

  • 我使用了一些下劃線的表名,所以表-A代替的TABLEA(就像Coreyward所做的那樣)來區分sql和名稱
  • 如果不需要多列,您應該指定所需的列而不是'SELECT *'
  • 如果您希望在找到多對多的匹配項時獲取空記錄集,則可以使用JOIN而不是LEFT JOIN。 (使用LEFT JOIN的優點是您仍然可以訪問table_A中的列)
  • 在您的查詢中直接使用$ _POST-vars是不明智的,這是一個嚴重的安全風險(SQL注入)。