2014-10-28 106 views
0

我有一個父子關係表的id,這是多對多關係表和用戶id存儲在用戶表中,表格的基本格式在這裏:mysql:在父親兒子關係表中查找第一個父親的單個查詢

.......................... | father_id | son_id | ........................... | A | B | .......................... | B | C | .......................... | C | D | .......................... | D | E |

現在我一定要找到兒子的任何一個偉大的祖父,我可以通過單一的MySQL查詢做到這一點還是我必須使用PHP循環?

+0

MySQL是不是好來處理遞歸查詢,但如果關係的深度已知,那麼使用單個查詢您可以旅行來回。另一方面,您可以使用PHP遞歸函數輕鬆完成工作。 – 2014-10-28 06:51:24

+0

感謝您的建議,所以它不可能與MySQL – Shivam 2014-10-30 07:20:19

+0

「最偉大的祖父」並不意味着什麼。如果你想*偉大的祖父*,那麼「關係的深度是已知的」,並且查詢很簡單。 (否則請參閱[this](https://dba.stackexchange.com/questions/7147/find-highest-level-of-a-hierarchical-field-with-vs-without-ctes/7161#7161)。)但是「任何一個兒子」都不清楚。使用小而明確的句子和短語。不要滿足於某些不清楚的事情;繼續編輯。你想要每個父親是曾祖父的父親嗎? – philipxy 2014-12-09 07:29:31

回答

0

你的問題還不清楚,但如果你想每一個爸爸誰是曾祖父的father_id:

你的錶行,其中「人[father_id]是的人[son_id]之父」。以is_father_of(father_id,son_id)的形式簡寫。請注意,速記就像一個SQL表格聲明。別名fs,gs,ggs到您的原始表is_father_of。你要行(ggs.is_father_id)其中

is_father_of(fs.father_id,fs.son_id) 
and is_father_of(gs.father_id,fs.father_id) 
and is_father_of(ggs.father_id,gs.father_id) 

這是

select gg.is_father_id 
from is_father_of fs 
join is_father_of gs on gs.son_id = fs.father_id 
join is_father_of ggs on ggs.son_id = gs.father_id