【问题标题】:MYSQL DISTINCT ORDER BY doesn't giving correct orderMYSQL DISTINCT ORDER BY 没有给出正确的顺序
【发布时间】:2012-01-21 11:56:57
【问题描述】:

更新:谢谢大家,现在使用这个查询可以 100% 工作:

SELECT e.entry_id
FROM exp_channel_titles AS e
INNER JOIN exp_matrix_data AS m ON m.entry_id = e.entry_id
WHERE e.channel_id = 2
GROUP BY e.entry_id
ORDER BY MIN(m.col_id_2) ASC

这是我的代码。

来自 .home_laagste_rentes 的代码

{exp:channel:entries dynamic="no" fixed_order="0{embed:entry_ids}" disable="member_data|pagination|categories"}
<tr class="{switch="odd|even"}">
    <td><a href="#" title="{title}">{title}</a></td>
    <td>{dk:lowest col="rente" decimals="2" dec_point=","}%</td>
    <td>{count}</td>
</tr>
{/exp:channel:entries}

页面代码:

<table id="rowspan" cellspacing="0" class="tablesorter">
<thead>
    <tr>
        <th>Krediet aanbieder</th>
            <th>Rente</th>
            <th>Beoordeling</th>
    </tr>
</thead>
<tbody>
{embed="embeds/.home_laagste_rentes"
entry_ids="{exp:query sql="
    SELECT DISTINCT (e.entry_id)
    FROM exp_channel_titles AS e
    INNER JOIN exp_matrix_data AS m ON m.entry_id = e.entry_id
    WHERE e.channel_id = 2
    ORDER BY m.col_id_2 ASC
"}|{entry_id}{/exp:query}"}
</tbody>

col_id_2 设置为十进制(10,4)

entry_id 设置为 int

这是过滤重复的,但它没有给出正确的顺序。看起来过滤重复项是随机完成的...有关输出,请参见此链接: http://postimage.org/image/9vzahuuez/

【问题讨论】:

  • 那不是创建链接表的查询..请张贴孔查询
  • 嗨 Rauschen,刚刚更新了完整代码..
  • @TVoskuilen 你能把表exp_channel_titlesexp_matrix_dataSCHEMA 贴出来吗?
  • 使用这个查询它工作正常:SELECT e.entry_id FROM exp_channel_titles AS e INNER JOIN exp_matrix_data AS m ON m.entry_id = e.entry_id WHERE e.channel_id = 2 GROUP BY e.entry_id ORDER BY MIN(m.col_id_2) ASC

标签: mysql sql-order-by distinct expressionengine


【解决方案1】:

对于一个e.entry_id,您有许多可能不同的m.col_id_2 值。

您的查询甚至不是有效的 ANSI SQL,因为 ORDER BY 是在 DISTINCT 之后评估的,所以 ORDER BY m.col_id_2 应该会产生错误(如果您的 MySQL 设置是严格的 ANSI SQL)。

解决方案是使用GROUP BY 而不是SELECT DISTINCT 来说明应该使用哪个值进行排序:

SELECT e.entry_id
FROM exp_channel_titles AS e
INNER JOIN exp_matrix_data AS m ON m.entry_id = e.entry_id
WHERE e.channel_id = 2
GROUP BY e.entry_id
ORDER BY MAX(m.col_id_2) ASC                  --- or MIN(), or AVG()

【讨论】:

    【解决方案2】:

    我不知道你表的SCHEMA,但你可以试试这个查询。

    SELECT iTable.entry_id
    FROM
        (SELECT DISTINCT e.entry_id, m.col_id_2
        FROM exp_channel_titles AS e INNER JOIN exp_matrix_data AS m 
                    ON m.entry_id = e.entry_id
        WHERE e.channel_id = 2) as iTable
    ORDER BY iTable.col_id_2 ASC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2014-03-25
      相关资源
      最近更新 更多