给出parent_id选择回复的文本

时间:2014-11-16 15:35:00

标签: mysql sql

我有这张表oc_review

review_id  product_id customer_id author text                                    rating  status date_added          date_modified       parent_id 
        3           0           3 12345  123456123123123123123123123123               5       0 2014-11-12 14:03:04 0000-00-00 00:00:00      NULL 
        4           0           3 Jacky  awefawefawefawefawefawefawefawefawefawef     5       0 2014-11-12 14:19:24 0000-00-00 00:00:00      NULL 
        5           0           3 Jacky  2134123412341234123412412341234124134        1       0 2014-11-12 14:20:34 0000-00-00 00:00:00      NULL 

我目前正在尝试根据text等于review_id的位置选择parent_id

在上面显示的示例中,parent_id对于这三行是null,因为每个review_id都不包含"回复"。 A"回复"看起来像这样:

     1124        1635           0 Admin I am really sorry you had a bad exper...     1       0 2014-li-13 16:01:28 0000-00-00 00:00:00       123 

这意味着,review_id 124是"回复"到parent_id 123。或者更简单,review_id 123有一个review_id 124的孩子。

我的问题是,如何在给定text的情况下选择回复的parent_id(孩子)?我试过了:

SELECT text FROM oc_review ON (review_id = parent_id) WHERE review_id = 123;

上面的代码段只返回一个空集。

2 个答案:

答案 0 :(得分:2)

这样做你想要的吗?

SELECT r.text
FROM oc_review r
WHERE parent_id = 123;

答案 1 :(得分:1)

在这种特殊情况下你应该使用join:

SELECT oc.text 
FROM oc_review o 
LEFT JOIN oc_review oc 
ON (o.review_id = oc.parent_id) 
WHERE o.review_id = 123;

说明:

  • SELECT oc.text - 我们将从连接表中取text
  • FROM oc_review o - 我们从表oc_review获取别名o
  • 的信息
  • LEFT JOIN oc_review oc - 我们做左连接并将自连接的别名设置为oc
  • ON(o.review_id = oc.parent_id) - 如果主表review_id等于联接表的parent_id,我们加入
  • WHERE o.review_id = 123 - 主表的review_id为123