选择内部连接,sql和php的group_concat

时间:2012-01-21 16:32:38

标签: php mysql sql drop-down-menu

我有以下查询:

$myquery = mysql_query("SELECT p.name, GROUP_CONCAT(m.name) as products
                    FROM access as pm
                    INNER JOIN seller as p on p.id = pm.id_seller
                    INNER JOIN products as m on m.id  = pm.id_product
                    WHERE p.id = '".$_COOKIE['id_seller']."'");

返回给我这个数组:

Array (
[0] => Seller Name [name] => Seller Name
[1] => Product1 [products] => Product1
);

我应该如何正确查询数据库?感谢我有3张桌子(产品,访问和卖家)。我想要实现的是将一个或多个产品归属(访问)给卖家。

我的下拉列表如何填充代码看起来像?

<?php
      echo'<select name="productaccess">';
foreach($myquery as $product) {
      echo'<option value="'.$product.'">'.$product.'</option>';
}
      echo'</select>';
?> 

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您希望产品仅用于一个卖家,则根本不需要分组。只需列出产品名称:

$myquery = mysql_query("SELECT m.name
                    FROM access as pm
                    INNER JOIN seller as p on p.id = pm.id_seller
                    INNER JOIN products as m on m.id  = pm.id_product
                    WHERE p.id = '".$_COOKIE['id_seller']."'");

现在$myquery只是一个资源标识符,而不是结果,因此您可以使用mysql_fetch_array()获取后者:

while($row=mysql_fetch_array($myquery)) {
    echo'<option value="'.$row['name'].'">'.$row['name'].'</option>';
}

答案 1 :(得分:0)

GROUP_CONCAT与GROUP BY子句一起使用,该子句不存在。在您的SQL中添加'GROUP BY p.name'。这将使上面的SQL返回单行,卖家名称和产品名称以逗号分隔。然后将产品名称分解为一个数组,然后将其输入到foreach循环中。