Mysql 从表中选择两个不同的列
所以,有一个网站,在那里用户添加公告,在首页上有最新的公告,一些用户在一天中多次添加相同的公告,所以我需要一个选择,以显示一天中只有一个用户发布的公告 我一天(“日期”)只需要一个用户(“创建者”)发布一个“id” 我试过这个,但它没有按我想要的方式工作(它得到了所有列),有人有什么想法吗 我的代码:Mysql 从表中选择两个不同的列,mysql,sql,select,distinct,Mysql,Sql,Select,Distinct,所以,有一个网站,在那里用户添加公告,在首页上有最新的公告,一些用户在一天中多次添加相同的公告,所以我需要一个选择,以显示一天中只有一个用户发布的公告 我一天(“日期”)只需要一个用户(“创建者”)发布一个“id” 我试过这个,但它没有按我想要的方式工作(它得到了所有列),有人有什么想法吗 我的代码: SELECT DISTINCT least(creator, date) AS creator, greatest(creator, date) AS date, tit
SELECT
DISTINCT least(creator, date) AS creator,
greatest(creator, date) AS date,
title AS product_title,
id,
introimg, price,
currency,
city,
shetanxmebit,
publish_date
FROM mar_home_main
WHERE introimg!="" AND publish=1 AND visible=1
ORDER BY publish_date DESC
LIMIT 20;
我想你可以看看
[GROUP_CONCAT()]
。这可能是您的解决方案的变通方法之一。单击查看有关它的详细信息 所以,在阅读了评论和编辑了我的代码之后,这个对我来说很有用
'SELECT id, creator, date, title AS product_title, introimg,
price, currency, city, shetanxmebit, publish_date
FROM mar_home_main
WHERE introimg!="" AND publish=1 AND visible=1
GROUP BY creator, date
ORDER BY publish_date DESC
LIMIT 20';
通常,您需要使用子查询来获取每组记录的最新记录,然后将其连接回主表
SELECT a.id,
a.creator,
a.date,
a.title AS product_title,
a.introimg,
a.price,
a.currency,
a.city,
a.shetanxmebit,
a.publish_date
FROM mar_home_main a
INNER JOIN
(
SELECT creator, MAX(date) AS latest_date
FROM mar_home_main
WHERE introimg!=""
AND publish=1 AND
visible=1
GROUP BY creator
) sub0
ON a.creator = sub0.creator
ON a.date = sub0.latest_date
WHERE introimg!=""
AND publish=1
AND visible=1
ORDER BY publish_date DESC
LIMIT 20
如果有5个,其中两个是重复的,您希望发布哪一个公告?一个简单的输入和预期的输出会很有帮助。您知道
DISTINCT
是SELECT DISTINCT
的一部分,并且对整个选定行都有效?您必须使用GROUP BY
和MAX
或MIN
来代替DISTINCT
错误使用DISTINCT
。尝试使用GROUP BY
,以及日期值上的MIN/MAX
来构造查询。除了distinct之外,您的最小()和最大()用法似乎也是错误的,因为它将在相同类型的数据集上工作,这里一个是id,另一个是date,因此返回的结果将是错误的。您按创建者和日期分组,但是您没有使用诸如MIN和MAX之类的聚合函数。这意味着,当有多个创建者和日期记录时,您可以从这些记录中任意选择值,即其中一个价格、一种货币等。甚至不能保证这些值是从同一记录中选择的,因此,如果你在一个记录中有50美元,在另一个记录中有20欧元,那么你最终可能会得到20美元(尽管这不太可能发生)。与您排序的发布日期相同;这可以是创建者和日期的第一个、最后一个或任何其他。您有GROUP BY子句,但没有聚合函数。这总是一个坏主意。