Mysql 您总是希望只返回一行吗?或者根据会话历史记录,这可能会有所不同吗?不,最终我希望返回整个会话,无论是将子ID还是父ID传递到查询中。我的错误是没有在OP中说明这一点。那么“对话”是不是只有一个父母和一个孩子?(总是期望/希望返回两行?)我猜(也是从前面的帖

Mysql 您总是希望只返回一行吗?或者根据会话历史记录,这可能会有所不同吗?不,最终我希望返回整个会话,无论是将子ID还是父ID传递到查询中。我的错误是没有在OP中说明这一点。那么“对话”是不是只有一个父母和一个孩子?(总是期望/希望返回两行?)我猜(也是从前面的帖,mysql,Mysql,您总是希望只返回一行吗?或者根据会话历史记录,这可能会有所不同吗?不,最终我希望返回整个会话,无论是将子ID还是父ID传递到查询中。我的错误是没有在OP中说明这一点。那么“对话”是不是只有一个父母和一个孩子?(总是期望/希望返回两行?)我猜(也是从前面的帖子回答中)-这里的主要问题可能是“0”是“特殊的”—它表示“对话的开始”……然后“0”位会起作用(上面建议)。如果您确实需要遍历两个以上的记录,则不确定如果没有“连接方式”类型安排,您将如何执行此操作……不,可能有许多子记录。将其视为一个文章评


您总是希望只返回一行吗?或者根据会话历史记录,这可能会有所不同吗?不,最终我希望返回整个会话,无论是将子ID还是父ID传递到查询中。我的错误是没有在OP中说明这一点。那么“对话”是不是只有一个父母和一个孩子?(总是期望/希望返回两行?)我猜(也是从前面的帖子回答中)-这里的主要问题可能是“0”是“特殊的”—它表示“对话的开始”……然后“0”位会起作用(上面建议)。如果您确实需要遍历两个以上的记录,则不确定如果没有“连接方式”类型安排,您将如何执行此操作……不,可能有许多子记录。将其视为一个文章评论系统。一个人添加一条评论,多个人可以添加对该评论的回复。但它只涉及一个方面,用户无法回复回复。基本上,用户可以单击回复父评论或子评论,在评论页面上,他们可以查看整个线程,因此无论传递的是父ID还是子ID,我都希望返回整个对话。我认为这也需要一个“联合”…我认为我的答案不太涵盖…这是可行的。我希望有一个更干净的方法来做这件事,但我想不出来,这比我提出的庞大的工会查询要干净一点,谢谢。我想这也需要一个“工会”…我不认为我的答案完全涵盖了…这是行得通的。我希望有一个更干净的方法来做这件事,但我想不出来,这比我提出的庞大的工会查询要干净一点,谢谢。
select * from table where id = 2 or parent_id = ( select parent_id from table where id = 2 )
select * from table where id = 1 or parent_id = ( select parent_id from table where id = 1 )
-- I *think* from OP's description , this should do it.
-- The first SELECT will _always_ bring back a single row (the ID is unique and known to the issuer of the query).
-- The second SELECT may bring back zero, one or many rows
-- So (if my understanding is correct) in English:
-- Bring back the row for the given ID and all (if any) rows which have me as a parent_id.
-- Rehashed : joining up the IDs from parent->child
-- Again, not tried...
SELECT * FROM table parent WHERE parent.id = <id>
union
SELECT * FROM table child WHERE child.id=parent.id;
 SELECT DISTINCT * FROM 
 (
    --is a child of the specified parent
    SELECT * from table  WHERE parent_id = @SomeID 
    UNION ALL
    -- is the record specified by ID
    SELECT * from table  WHERE ID = @SomeID 
                         --and get the parent itself
                         OR ID = (SELECT parent_id FROM table WHERE ID = @SomeID) 

    UNION ALL
    --all siblings with the same parent
    SELECT * FROM table WHERE parent_id = (SELECT parent_id 
                                           FROM table WHERE ID = @SomeID) 
                        AND parent_id>0

   ) F
ORDER BY ID