SQL:超越INNER JOIN(缺少更好的标题)

时间:2011-04-08 18:10:27

标签: sql oracle oracle11g inner-join

环境:
- PHP 5.3.5
- Oracle 11g数据库

表名:tips_categories

id   category   picture  
1    a          e.jpg  
2    b        f.jpg  
3    c        g.jpg  

表名:提示

id   tips_categories_id   tip
1    3                       This is a tip.
2    2                       This is another tip.
3    1                       This is yet another tip.

期望的结果:

$array_name['tips']
    [0]
        category => a
        picture => e.jpg
        tips
            [0] => This is yet another tip.
    [1]
        category => b
        picture => f.jpg
        tips
            [0] => This is another tip.
    [2]
        category => c
        picture => g.jpg
        tips
            [0] => This is a tip.

编写一个返回所需resuilt的查询超出了我目前对SQL的了解。 INNER JOIN不会返回所需的结果。如果无法在一个查询中完成, 我想必须使用以下两个查询:

SELECT id,category,picture FROM tips_categories
SELECT tip FROM tips WHERE tips_categories_id = id

我非常感谢有关如何在一个语句中编写此查询的建议。谢谢: - )

2 个答案:

答案 0 :(得分:3)

查询不返回分层结果集。所以你要做的就是不可能。

您可以编写一个简单的内连接查询,按id排序,然后创建自我迭代结果集的数组,并在每次id更改时向数组中添加一个新条目。 / p>

查询:

SELECT tips.id,category,picture, tip
  FROM tips_categories
 INNER JOIN tips on (tips_categories_id = id)
 ORDER BY tips.ip

因此,您的结果集将类似于:

 id   category   picture  tip
 1    a          e.jpg    This is yet another tip A01.
 1    a          e.jpg    This is yet another tip A02.
 1    a          e.jpg    This is yet another tip A03.
 2    b          f.jpg    This is another tip B01.
 2    b          f.jpg    This is another tip B02.
 3    c          g.jpg    This is a tip C01.

如果您的tips表格中有更多条目。

使用PHP进行迭代并在阵列上生成所需的结果。它应该非常简单明了。

答案 1 :(得分:3)

好吧:

SELECT c.id, c.category, c.picture, t.tip
FROM tips_categories AS c
INNER JOIN tips AS t
    ON t.tips_categories_id = c.id

当然会返回您想要的数据,但提示只是第4列,而不是某种层次结构。

你有什么用来从结果中构建你的数组?