更新:感谢大家,使用此查询现在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/
答案 0 :(得分:1)
对于一个m.col_id_2
,您有许多(可能不同的)e.entry_id
值。
您的查询甚至不是有效的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()
答案 1 :(得分:0)
我不知道您桌子的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