【问题标题】:Mysql SELECT from 2 tableMysql SELECT 从 2 个表
【发布时间】:2011-08-10 09:32:00
【问题描述】:

我似乎不知道如何创建一个 SELECT 语句来对产品进行分组并在一种产品类型下显示产品。

我有一个名为 floor 的表,其中包含 15 种不同的地板产品,还有一个名为 floortypes 的表,其中包含 8 种不同的产品类型 (ftid) 和一个产品图片。 15 种产品中的每一种都有一个地板类型,用于定义它是哪种类型。有些产品几乎相同,但尺寸不同,但它给产品提供了不同的描述。

例子:

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>';
    }
}

给了我想要的东西!

【问题讨论】:

    标签: php mysql select join


    【解决方案1】:

    也许您只是在寻找这个?

    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
    

    【讨论】:

    • 我修好了!我的答案在顶部! :)
    • 晚安!如果这对您有帮助,如果您接受答案,那就太好了!
    【解决方案2】:
    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”替换为实际列,您的输出将是

    • 产品类型 1,图片,“产品 1,产品 2”
    • 产品类型 2,图片,“产品 3,产品 4”

    ....等

    希望对你有帮助

    【讨论】:

    • 你能帮我多一点吗? :) 我有这个: SELECT A.fid, A.floorname, A.desc_dk, A.floortype, B.prodimage, GROUP_CONCAT(A.fid ORDER BY B.ftid SEPARATOR ',') FROM Floor A JOIN floortypes B ON A .floortype = B.ftid GROUP BY B.prodimage 其中 fid 是 floor 中的楼层 id,ftid 是 floortypes 中的 id 但它仍然只输出特定类型的一个产品。
    • 等一下....如果我把 SELECT A.fid, A.floorname, A.desc_dk, A.floortype, B.prodimage, GROUP_CONCAT(A.desc_dk SEPARATOR ',') FROM楼层 A JOIN floortypes B ON A.floortype = B.ftid GROUP BY A.floortype, B.prodimage 到 PHPMYADMIN 它似乎工作正常,所以我只需要弄清楚如何在 while 循环中正确输出它
    • 我在 GROUP_CONCAT 之后忘记了 AS ......所以如果我把 AS descr 和 echo $row["descr"] 放出来就好了!感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    相关资源
    最近更新 更多