Php Mysql在复杂查询中与组_CONCAT连接
我在运行查询时遇到了一个问题。 我有三张桌子: 类别 照片 投资组合 当然,这是行不通的,因为我不知道我应该把小组会议放在哪里。有什么想法吗?考虑到这是一个聚合函数,您必须使用GROUP BY来获得所需的结果集。你可以试试这个: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
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