从2表中选择Mysql

时间:2011-08-10 09:32:00

标签: php mysql select join

我似乎无法弄清楚如何制作一个SELECT产品,它将产品分组并在一种产品类型下显示产品。

我有一个名为floor的表,包含15种不同的地板产品和一个名为floortypes的表,包含8种不同的产品类型(ftid)和产品图像。 15种产品中的每一种都有一种floortype,它定义了它的类型。有些产品几乎相同但具有不同的测量值,但它给产品提供了不同的描述。

示例:

Product: Product 1 Product type: 1
Product: Product 2 Product type: 1
Product: Product 3 Product type: 2
Product: Product 4 Product type: 2
Product: Product 5 Product type: 3
Product: Product 6 Product type: 4

我想要的是要在具有1个产品图像的产品组下显示的产品

Producttype 1 image
Product 1 description
Product 2 description 

Producttype 2 image
Product 3 description
Product 4 description  

Producttype 3 image
Product 5 description

Producttype 4 image
Product 6 description

我希望有人能够帮助我!

修改

我使用了你的第一个完美无缺的例子。 这是我的最终代码:

$sql = SQLHandling::SQLquery("SELECT A.fid, A.floorname, A.desc_dk, A.floortype, B.prodimage, GROUP_CONCAT(A.desc_dk SEPARATOR '|') AS descr, GROUP_CONCAT(A.floorname SEPARATOR '|') AS fname FROM floors A JOIN floortypes B ON A.floortype = B.ftid GROUP BY A.floortype, B.prodimage");

然后我的while循环:

$counter = 0;

while($row = mysql_fetch_array($sql)) {

    $delimiter = "|";
    $descr = explode($delimiter, $row["descr"]);
    $fname = explode($delimiter, $row["fname"]);

    $markers["###FLOOR###"] .= '<div style="float: left; width: 200px; height: 425px; margin: 0px 10px 0px 10px; vertical-align: text-top; text-align: left;">';    
    $markers["###FLOOR###"] .= '<p><a href="index.php?page=sfp&room='. $_GET["room"] .'&floor='. $row["floorname"] .'&wall='. $_GET["wall"] .'&envi='. $_GET["envi"] .'&fpanel='. $_GET["fpanel"] .'"><img src="images/floors/'. $row["prodimage"] .'.jpg" width="200" /></a></p>';

    for ($i = 0; $i < count($descr); $i++) { 
        $markers["###FLOOR###"] .= '<p><a href="index.php?page=sfp&room='. $_GET["room"] .'&floor='. $fname[$i] .'&wall='. $_GET["wall"] .'&envi='. $_GET["envi"] .'&fpanel='. $_GET["fpanel"] .'">'. $descr[$i].'</a></p>';
    }

    $markers["###FLOOR###"] .= '</div>';

    if (++$counter % 4 == 0) {
        $markers["###FLOOR###"] .=  '<div style="clear: both;">&nbsp;</div>';
    }
}

给了我正是我想要的东西!

2 个答案:

答案 0 :(得分:0)

SELECT A.producttype, B.image, Group_concat(<productid> order by <productid> SEPARATOR ',') Products
FROM   PRODUCT A JOIN producttype B
ON     A.producttype = B.producttype
GROUP  BY A.Producttype, B.image

将“productid”替换为实际列,输出将为

  • producttype 1,image,“product 1,product 2”
  • producttype 2,image,“product 3,product 4”

....等

希望这有帮助

答案 1 :(得分:0)

也许你只是在寻找这个?

SELECT B.ftid, B.prodimage, A.fid, A.floorname, A.desc_dk     
FROM   floors A JOIN floortypes B 
ON     A.floortype = B.ftid

这将给出如下结果集,

producttype1, pt1image, product1 id, product1 name, product1 descriptin
producttype1, pt1image, product2 id, product2 name, product2 descriptin
producttype2, pt2image, product3 id, product3 name, product3 descriptin
producttype2, pt2image, product4 id, product4 name, product4 descriptin
producttype3, pt3image, product5 id, product5 name, product5 descriptin
producttype4, pt4image, product6 id, product6 name, product6 descriptin