Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql在复杂查询中与组_CONCAT连接_Php_Mysql_Sql_Join_Group Concat - Fatal编程技术网

Php Mysql在复杂查询中与组_CONCAT连接

Php Mysql在复杂查询中与组_CONCAT连接,php,mysql,sql,join,group-concat,Php,Mysql,Sql,Join,Group Concat,我在运行查询时遇到了一个问题。 我有三张桌子: 类别 照片 投资组合 当然,这是行不通的,因为我不知道我应该把小组会议放在哪里。有什么想法吗?考虑到这是一个聚合函数,您必须使用GROUP BY来获得所需的结果集。你可以试试这个: SELECT portfolios.*, categories.*, GROUP_CONCAT(photos.image) AS image FROM `portfolios` inner join `categories` on `portfolios`.`cati

我在运行查询时遇到了一个问题。 我有三张桌子:

类别

照片

投资组合

当然,这是行不通的,因为我不知道我应该把小组会议放在哪里。有什么想法吗?

考虑到这是一个聚合函数,您必须使用GROUP BY来获得所需的结果集。你可以试试这个:

SELECT portfolios.*, categories.*, GROUP_CONCAT(photos.image) AS image
FROM `portfolios` 
inner join `categories` on `portfolios`.`catid` = `categories`.`id` 
inner join `photos` on `portid` = `portfolios`.`id` 
where `categories`.`name` = "Poster"
GROUP BY portfolios.id
SELECT
    `portfolios`.*,
    `categories`.*,
    GROUP_CONCAT(
        `photos`.`image`
            ORDER BY `photos`.`preveiw` DESC
            SEPARATOR ', '
    ) as `image`
FROM
   `portfolios` 
       INNER JOIN `categories` ON `portfolios`.`catid` = `categories`.`id` 
       INNER JOIN `photos` ON `portid` = `portfolios`.`id` 
WHERE
    `categories`.`name` = 'Poster'
GROUP BY
    `portfolios`.`id`
考虑到这是一个聚合函数,您必须使用GROUPBY来获得所需的结果集。你可以试试这个:

SELECT
    `portfolios`.*,
    `categories`.*,
    GROUP_CONCAT(
        `photos`.`image`
            ORDER BY `photos`.`preveiw` DESC
            SEPARATOR ', '
    ) as `image`
FROM
   `portfolios` 
       INNER JOIN `categories` ON `portfolios`.`catid` = `categories`.`id` 
       INNER JOIN `photos` ON `portid` = `portfolios`.`id` 
WHERE
    `categories`.`name` = 'Poster'
GROUP BY
    `portfolios`.`id`

如果您将列拼写出来而不是使用*,则会容易得多:

select p.id, p.catid, c.name, p.type, p.title
     , p.text, p.date. group_concat(ph.image order by case when ph.previw = 1 
                                                           then 0 else 1 
                                                      end) as images 
from `portfolios` p 
join `categories` c
    on p.`catid` = c.`id` 
join `photos` ph
    on ph.`portid` = p.`id` 
where c.`name` = "Poster"
group by p.id, p.catid, c.name, p.type, p.title
       , p.text, p.date 

如果您将列拼写出来而不是使用*,则会容易得多:

select p.id, p.catid, c.name, p.type, p.title
     , p.text, p.date. group_concat(ph.image order by case when ph.previw = 1 
                                                           then 0 else 1 
                                                      end) as images 
from `portfolios` p 
join `categories` c
    on p.`catid` = c.`id` 
join `photos` ph
    on ph.`portid` = p.`id` 
where c.`name` = "Poster"
group by p.id, p.catid, c.name, p.type, p.title
       , p.text, p.date 

@早上好,干杯。这在第一次是很棘手的,但在练习中你会习惯的。@Siamak.a.M干杯。这在第一时间是很棘手的,但在实践中你会习惯的。这是用PHP标记的,所以根本不需要使用GROUP_CONCAT。作为一般规则,当您有可用的应用程序级代码时,我认为最好在那里处理连接-除非您还执行其他聚合操作。因此,只需返回一个有序数组,然后在PHP中执行其余操作。它更灵活,可扩展性更好。这是用PHP标记的,所以根本不需要使用GROUP_CONCAT。作为一般规则,当您有可用的应用程序级代码时,我认为最好在那里处理连接-除非您还执行其他聚合操作。因此,只需返回一个有序数组,然后在PHP中执行其余操作。它更灵活,伸缩性更好。
SELECT portfolios.*, categories.*, GROUP_CONCAT(photos.image) AS image
FROM `portfolios` 
inner join `categories` on `portfolios`.`catid` = `categories`.`id` 
inner join `photos` on `portid` = `portfolios`.`id` 
where `categories`.`name` = "Poster"
GROUP BY portfolios.id
SELECT
    `portfolios`.*,
    `categories`.*,
    GROUP_CONCAT(
        `photos`.`image`
            ORDER BY `photos`.`preveiw` DESC
            SEPARATOR ', '
    ) as `image`
FROM
   `portfolios` 
       INNER JOIN `categories` ON `portfolios`.`catid` = `categories`.`id` 
       INNER JOIN `photos` ON `portid` = `portfolios`.`id` 
WHERE
    `categories`.`name` = 'Poster'
GROUP BY
    `portfolios`.`id`
select p.id, p.catid, c.name, p.type, p.title
     , p.text, p.date. group_concat(ph.image order by case when ph.previw = 1 
                                                           then 0 else 1 
                                                      end) as images 
from `portfolios` p 
join `categories` c
    on p.`catid` = c.`id` 
join `photos` ph
    on ph.`portid` = p.`id` 
where c.`name` = "Poster"
group by p.id, p.catid, c.name, p.type, p.title
       , p.text, p.date