Mysql从多个表中加入行

时间:2014-02-18 16:32:04

标签: mysql select join

我在这里问,因为我需要用什么英语单词来搜索我想要做的事情。 我可以通过多个查询来解决这个问题,然后使用for和foreach循环连接数组,但是如果有更聪明的方法,为什么要这样做呢。

我的查询现在看起来像:

SELECT p.* , pi.path, pv.videoid
FROM products p
JOIN productimage pi ON (p.id = pi.product)
JOIN productvideo pv ON (p.id = pv.product)
WHERE p.id=:id

我的表格看起来像

产物:

|---id---|---name----|---desc---|---price---|---active----|
|---1----|---somet---|---dsa----|---456-----|---1/0-------|
|---2----|---somet2--|---ddsasa-|---44556---|---1/0-------|

产品视频:

|----id----|---product----|----videoid-------|
|----4-----|---1----------|-----youtubeid----|
|----4-----|---1----------|--secondyoutubeid-|

和图像的视频相同,我想为文件制作相同的文件

这样的结果使其变得简单

//result of $stmt->fetchAll(PDO::FETCH_ASSOC);
$arr = array(
    0 => array(
        "id" => "1",
        "name" => "hello world",
        "category" => "3",
        "videoid" => array("oneyoutubeid", "secondid", "thirdid"), //videos that is for this product
        "path" => array("imagepathofproduct", "secondimageofproduct"),
        "active" => "1"
    ),
    1 => array(
        "id" => "2",
        "name" => "hello world product 2",
        "category" => "4",
        "videoid" => array("oneyoutubeid", "secondid", "thirdid"), //videos that is for this product
        "path" => array("imagepathofproduct", "secondimageofproduct"),
        "active" => "1"
    ),
);
to use it like this: return $stmt->fetchAll(PDO::FETCH_ASSOC); and start foreach for displaying data.

非常感谢

1 个答案:

答案 0 :(得分:0)

通过concat解决,我将它爆炸成数组。  但仍在等待更智能的解决方案。

解决方案:

SELECT p.* , GROUP_CONCAT(DISTINCT path ORDER BY pi.id) AS images, GROUP_CONCAT(DISTINCT videoid ORDER BY pi.id) AS videos FROM products p JOIN productimage pi ON (p.id = pi.product) JOIN productvideo pv ON (p.id = pv.product) WHERE p.id=1

回家它会帮助某人

相关问题