2011-04-01 91 views
1

我有3代表的產品,products_extra_fields,products_to_products_extra_fieldsMySQL查詢 - 編輯額外的字段

產品表

+-------------+--------------+---------------+ 
| products_id | categories_id| products_name | 
+-------------+--------------+---------------+ 
| 1   | 1   | product 1  | 
| 2   | 1   | product 2  | 
+-------------+--------------+---------------+ 

products_extra_fields表

+--------------------------+---------------------------+ 
| products_extra_fields_id | products_extra_fields_name| 
+--------------------------+---------------------------+ 
| 1      | sugar      | 
| 2      | cocoa      | 
| 3      | butter     | 
| 4      | milk      | 
+--------------------------+---------------------------+ 

products_to_products_extra_fields表

+-------------+---------------------------+-----------------------------+ 
| products_id | products_extra_fields_id | products_extra_fields_value | 
+-------------+---------------------------+-----------------------------+ 
| 1   | 1       | 20%       | 
| 1   | 2       | 45%       | 
| 1   | 3       | 27%       | 
| 2   | 1       | 12%       | 
+-------------+---------------------------+-----------------------------+ 

我想編輯產品1我使用此查詢:

SELECT 
products_name, 
products_extra_fields_name, 
products_extra_fields_value FROM products, products_extra_fields, products_to_products_extra_fields 
WHERE products_to_products_extra_fields.products_extra_fields_id = products_extra_fields.products_extra_fields_id AND 
products_to_products_extra_fields.products_id=1 
GROUP BY products_extra_fields.products_extra_fields_id; 

+---------------+---------------------------+----------------------------+ 
| products_name | products_extra_fields_name| products_extra_fields_value| 
+---------------+---------------------------+----------------------------+ 
| product 1  | sugar      | 20%      | 
| product 1  | cocoa      | 45%      | 
| product 1  | butter     | 27%      | 
+---------------+---------------------------+----------------------------+ 

但我想看看

products_extra_fields_name(牛奶)沒有價值

+---------------+---------------------------+----------------------------+ 
| products_name | products_extra_fields_name| products_extra_fields_value| 
+---------------+---------------------------+----------------------------+ 
| product 1  | sugar      | 20%      | 
| product 1  | cocoa      | 45%      | 
| product 1  | butter     | 27%      | 
| product 1  | milk      |       | 
+---------------+---------------------------+----------------------------+ 

和產品2可可,奶油,沒有價值的牛奶只有糖12%

我能做些什麼來得到結果我w螞蟻。

看我的PHP腳本(products_edit2.php?ID = 1或2)

<?php 
require ('mysql/mysql_connect.php'); // Connect to the database. 
     if (is_numeric ($_GET['id'])) { 
    $query = "SELECT 
products_name, products_extra_fields_name, products_extra_fields_value FROM 
products, products_extra_fields, products_to_products_extra_fields WHERE 
products_to_products_extra_fields.products_extra_fields_id = products_extra_fields.products_extra_fields_id AND 
products_to_products_extra_fields.products_id = {$_GET['id']} 
GROUP BY products_extra_fields.products_extra_fields_id"; 

if ($result = mysql_query ($query)) { 

$query2 = "SELECT products_name FROM products WHERE products_id={$_GET['id']}"; 
if ($result2 = mysql_query ($query2)) { 
$row2 = mysql_fetch_array ($result2); 
$products_name = $row2['products_name']; 
?> 

<form action='products_edit.php' enctype='multipart/form-data' method='POST'> 
<table width="50%" border="0" cellpadding="2" cellspacing="2"> 
<tr> 
<td width="20%" align="right">PRODUCTS NAME:</td> 
<td><input type="text" name="products_name" size="80" value="<?php echo $products_name; ?>" /></td> 
</tr> 
<?php 
} 
/***** ***** *****/ 

while ($row = mysql_fetch_assoc ($result)) { 
$products_extra_fields_name = $row['products_extra_fields_name']; 
$products_extra_fields_value = $row['products_extra_fields_value']; 
$products_extra_fields_id = $row['products_extra_fields_id']; 
?> 
<tr> 
<td width="20%" align="right"><?php echo $products_extra_fields_id .'-'. $products_extra_fields_name; ?></td> 
<td><input type="text" name="categories_name" size="80" value="<?php echo $products_extra_fields_value; ?>" /></td> 
</tr> 

<?php } 

/***** ***** END *****/ 
?> 
<input type="hidden" name="categories_id" size="10" value="<?php echo $_GET['id']; ?>" /> 

<tr> 
<td width="100%" colspan="2" align="right"><input type="submit" name="submit" value="SAVE"/></td> 
</tr> 
</table> 
</form> 

<?php 
} else { // Couldn't get the information. 
print "<p>Could retrieve the entry because: <b>" . mysql_error() . "</b><br/><br/>. The query was $query.</p>"; 
} 
}else{ // No ID set. 
print '<p><b>You must have made a mistake in using this page.</b></p>'; 
} 
?> 

</body> 
</html> 

我想看到所有4 products_extra_fields_name和4個輸入框(產品1有3個值1空,產品2有1值3 null)

+0

你應該*不*使用'$ _GET'因爲SQL注入直接在查詢[ '身份證']。 – 2011-04-01 19:30:43

回答

3

當您在FROM中使用逗號分隔列表時,MySQL使用Inner Join。爲了得到你想要的,你需要使用左連接。

SELECT 
products_name, 
products_extra_fields_name, 
products_extra_fields_value 
FROM products, products_extra_fields 
LEFT JOIN products_to_products_extra_fields 
ON products_to_products_extra_fields.products_extra_fields_id = products_extra_fields.products_extra_fields_id 
AND products_to_products_extra_fields.products_id=1 
GROUP BY products_extra_fields.products_extra_fields_id; 

這將產生:

+---------------+---------------------------+----------------------------+ 
| products_name | products_extra_fields_name| products_extra_fields_value| 
+---------------+---------------------------+----------------------------+ 
| product 1  | sugar      | 20%      | 
| product 1  | cocoa      | 45%      | 
| product 1  | butter     | 27%      | 
| product 1  | milk      | NULL      | 
+---------------+---------------------------+----------------------------+ 
+0

thx但你的答案不全,我編輯我的問題看我的php腳本 – chris 2011-04-01 19:00:13

+0

對我以前的評論感到抱歉你的答案是全部 – chris 2011-04-01 19:57:23

+0

@chris:很高興我能幫忙:-D – 2011-04-01 19:58:06