Mysql ВЫБРАТЬ из 2 таблицы - PullRequest
1 голос
/ 10 августа 2011

Я не могу понять, как сделать оператор SELECT, который группирует продукты и отображает продукты под одним типом продукта.

У меня есть таблица с названиями этажей, содержащая 15 различных продуктов для полов, и таблица с именами цветов, содержащая 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

Надеюсь, кто-нибудь сможет мне помочь!

EDIT

Я использовал ваш первый пример, который работает без нареканий. Это мой окончательный код:

$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 голосов
/ 10 августа 2011

Может быть, вы просто ищете это?

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
0 голосов
/ 10 августа 2011
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, "продукт 3, продукт 4"

.... и т. д.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...