【问题标题】:MYSQL Order from another Table来自另一个表的 MYSQL 订单
【发布时间】:2012-04-04 23:47:18
【问题描述】:

我有一个问题。

我这里有两张桌子

表 1:产品

product_id , name , images_sideview

表 2:产品描述

product_id , volgnr

我想用表 2 和 volgnr 字段中的数字对它们进行排序。

有没有办法用 mysql 做到这一点?

【问题讨论】:

    标签: php mysql sorting tablesorter


    【解决方案1】:

    有两种排序方式。升序和降序。你没有提到订单。因此,我为您提供两种答案:

    升序:

    SELECT DISTINCT table1.*
    FROM table1
    INNER JOIN table2 ON table1.product_id = table2.product_id
    GROUP BY table1.product_id
    ORDER BY table2.product_id ASC, table2.volgnr ASC;
    

    降序:

    SELECT DISTINCT table1.*
    FROM table1
    INNER JOIN table2 ON table1.product_id = table2.product_id
    GROUP BY table1.product_id
    ORDER BY table2.product_id DESC, table2.volgnr DESC;
    

    如果你想告诉 MySQL 先排序 FIRST 按 volgnr 然后按 product_id

    升序:

    SELECT DISTINCT table1.*
    FROM table1
    INNER JOIN table2 ON table1.product_id = table2.product_id
    GROUP BY table1.product_id
    ORDER BY table2.volgnr ASC, table2.product_id ASC;
    

    降序:

    SELECT DISTINCT table1.*
    FROM table1
    INNER JOIN table2 ON table1.product_id = table2.product_id
    GROUP BY table1.product_id
    ORDER BY table2.volgnr DESC, table2.product_id DESC;
    

    希望对您有所帮助。

    编辑 1:

    我现在已经编辑了查询,以便它不会在结果中为您提供重复项。试试看,让我知道结果如何。

    编辑 2: 添加了 Group By 子句。试试这个。

    【讨论】:

    • 这有效,但它再次给了我重复的产品,我得到了每件产品三倍
    • 而不仅仅是 SELECT *,使用 SELECT DISTINCT * 应该可以解决它。
    • 我使用了 SELECT DISTINCT products.* FROM products INNER JOIN product_descriptions ON products.product_id = product_descriptions.product_id ORDER BY product_descriptions.product_id ASC, product_descriptions.volgnr ASC;非常好用,非常感谢@devner
    • 很高兴听到这个消息。如果问题在将来重复出现,请使用修改后的查询。我已经添加了 Edit 2,应该可以永久修复它。
    • @Chaosxmk 我使用 INNER JOIN 因为我只想查看两个表中都存在的条目。使用 LEFT JOIN 将带来 LEFT 表中的所有值,无论它是否在 RIGHT 表中具有匹配的条目。 IMO、GROUP BY / DISTINCT 不应成为您使用特定类型 JOIN 的标准。您只想过滤数据并因此使用 GROUP BY / DISTINCT。要回答您的问题,使用 INNER、LEFT 或 RIGHT 连接仅取决于您获取数据的需要。
    【解决方案2】:
    select *
    from products t1
    inner join product_descriptions t2 on t1.product_id = t2.product_id
    order by t2.volgnr
    

    【讨论】:

    • 不会 * 给出一个错误,因为 product_id 在两个表中?
    • 不确定 MySQL - 我想 OP 会想要选择特定的列。
    • @trembon 不,* 不会导致错误。仅引用“product_id”会导致错误。同样,如果您有两个名称相同的列,每个表中都有一个,您只能从 t2 中获得结果。但是,如果每个 product_id 在 Table2 中有多个行,这可能会返回比您想要的更多的结果。您可能想要执行类似 SELECT DISTINCT t1.product_id,t1.name FROM... 之类的操作,或者如果您想要 volgnr 值,则可能执行带有 GROUP_CONCAT 的 GROUP BY。
    • @trembon,不,SELECT * 中重复的列名不要出错。 MySQL 不需要区分它们,因为你没有对它们做任何事情。
    • 我试过你的代码@RedFilter 现在我有这个:select * from products t1 inner join products_descriptions on t1.product_id = t2.product_id order by t2.volgnr 但它似乎不起作用。我做错了什么?抱歉,我对 MSQL 不太擅长
    【解决方案3】:
    SELECT p.'product_id', p.'name', p.'images_sideview' 
    FROM products p 
    LEFT JOIN product_descriptions d ON p.product_id = d.product_id 
    ORDER BY d.volgnr;
    

    【讨论】:

      猜你喜欢
      • 2013-03-18
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多