2014-12-23 86 views
-1

我很难理解如何按来自另一个表格的数据排序查询。MySQL按其他表格数据排序

现有的查询是:SELECT ID FROM UserTour WHERE Live = 1 ORDER BY LastUpdated DESC

这在表中的列“LASTUPDATED”显然订单“UserTour”

不过,我需要它由列进行排序“LASTUPDATED”这是在另一个表'ImageLinks',其中'TypeID'= 16(再次在'ImageLinks'中)。

我希望这是有道理的。

因此,这将是这样的:$ids = @mysql_values('SELECT ID FROM UserTour WHERE Live = 1 ORDER BY ('Select ID FROM 'ImageLinks' Where TypeID = 16 Order by LastUpdated DESC')');

任何帮助就如何做到这一点可以理解。干杯

+3

如何'UserTour'和'ImageLinks'连接? – kero

+3

两个表之间是否有任何公共字段或主键/外键关系? – SMA

+0

如果您喜欢,请考虑遵循以下简单的两步式操作:1.如果您尚未这样做,请提供适当的DDL(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相符的所需结果集。 – Strawberry

回答

0

如果在两个表之间没有关系,你在你的问题的查询将看起来像这样

select id from 
(
    SELECT 
     ID 
    , (Select ID FROM ImageLinks Where TypeID = 16 
     Order by LastUpdated DESC limit 1) as order_val 
    FROM UserTour 
    WHERE Live = 1 
) x 
ORDER BY x.order_val 

这将工作,但不会做没有任何排序为order_val列将有一个固定值。

如果ID链接1:1(没有任何迹象表明他们,只是supposin'),我们可以这样做:

select u.id 
from UserTour u inner join ImageLinks i on u.ID = i.ID 
where u.Live = 1 and i.TypeID = 16 
order by i.LastUpdated desc 

如果上面不正确,你将不得不决定如何在两个表格相关并相应地加入它们。

换句话说,如果表是没有办法连接,那么你可以不提供基于其他列一个表的数据进行排序。

UPDATE

select 
    i.LinkID 
    , i.LastUpdated 
from UserTour u inner join ImageLinks i 
on u.ID = i.LinkID 
where u.Live = 1 and i.TypeID = 16 
group by i.LinkID, i.LastUpdated 
order by i.LastUpdated desc LIMIT 30 
+0

谢谢。由于您的帮助使我走上正轨,我现在拥有一定程度的工作能力,尽管它需要以某种方式进行分组。这是什么工程 - '$ ids = @mysql_values('从用户行选择u.id u内部联接ImageLinks我在u.ID = i.LinkID其中u.Live = 1和i.TypeID = 16 order by i.LastUpdated desc LIMIT 30');'尽管它需要通过u.linkID进行分组。我曾尝试在Order by之前通过u.LinkID添加Group,但它没有正确排序 – Treetops

+0

@Treetops:请参阅我的更新。你必须有i.LinkID(或u.ID)**和** i.LastUpdated在'group by'子句 – davek

+0

谢谢Davek,它解决了它,现在它完美的工作。非常感谢! – Treetops