Mysql 从表中选择两个不同的列

Mysql 从表中选择两个不同的列,mysql,sql,select,distinct,Mysql,Sql,Select,Distinct,所以,有一个网站,在那里用户添加公告,在首页上有最新的公告,一些用户在一天中多次添加相同的公告,所以我需要一个选择,以显示一天中只有一个用户发布的公告 我一天(“日期”)只需要一个用户(“创建者”)发布一个“id” 我试过这个,但它没有按我想要的方式工作(它得到了所有列),有人有什么想法吗 我的代码: SELECT DISTINCT least(creator, date) AS creator, greatest(creator, date) AS date, tit

所以,有一个网站,在那里用户添加公告,在首页上有最新的公告,一些用户在一天中多次添加相同的公告,所以我需要一个选择,以显示一天中只有一个用户发布的公告

我一天(“日期”)只需要一个用户(“创建者”)发布一个“id”

我试过这个,但它没有按我想要的方式工作(它得到了所有列),有人有什么想法吗

我的代码:

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子句,但没有聚合函数。这总是一个坏主意。