2013-02-14 51 views
1

我有一个看起来像这样排序项基于另一列的顺序在PHP

Title  |  ID 
--------------------------------- 
Hello   45 
Hi    23 
Yo    52 
Test   76 

然后我有另一个表看起来像这样一个数据库:

List     | Order 
--------------------------------- 
Main List    76,23,45,52 

我想要做的是查询数据库,并根据第二个表的顺序输出第一个表的标题。

任何关于做这种事情的最佳方式的想法?

+0

你能告诉我们订单的基础是什么? - 也许有一个更简单的方法 – Goaler444 2013-02-14 19:20:53

回答

3
SELECT 
    * 
FROM 
    menu m 
    INNER JOIN links l ON (l.menu_id = m.menu_id) 
WHERE 
    m.menu_id = 123 
ORDER BY 
    FIND_IN_SET(l.link_id, m.menu_order) 

显然,你需要改变在下面的评论,以反映实际的表和列名

每迈克尔Berkowski,如果你不具备这两个表(所以你可以之间的联系“T加入),你可以完成相同的只有:

SELECT t1.* 
FROM t1 
ORDER BY FIND_IN_SET(ID, (SELECT `Order` FROM t2)) 

随意更动他SQLFiddle例如:http://sqlfiddle.com/#!2/947e3/2

谢谢,迈克尔·

+0

'JOIN'不是必需的。 http://sqlfiddle.com/#!2/947e3/2 – 2013-02-14 19:23:20

+0

子选择真的更高效吗? – 2013-02-14 19:24:07

+0

我没有说它更有效率。 Point在OP的数据中有两个表之间没有链接,所以你只需要选择第一行的值。您也可以使用笛卡尔连接,但OPs示例表没有“l.menu_id”的证据。 – 2013-02-14 19:25:21