簡體   English   中英

帶有聯接的mysql查詢的可能規范化

[英]possible normalization for a mysql query with joins

我查詢了一個孩子的父母,直到生到第六個父母為止。 該查詢工作正常。 但是我只想知道將來是否有更好的范圍可以通過更好的查詢原因來獲得結果,如果我想獲取父級7和父級8,我將需要修改此代碼,並且獲取代碼的時間會越來越長家長編號。 另外,如果可以通過php進行任何操作,那也很好。

SELECT
    u.referred_by as parent_1,
    c1.referred_by as parent_2,
    c2.referred_by as parent_3,
    c3.referred_by as parent_4,
    c4.referred_by as parent_5,
    c5.referred_by as parent_6
FROM
    users u
LEFT JOIN users c1
    ON  c1.id=u.referred_by
LEFT JOIN users c2
    ON c2.id = c1.referred_by
LEFT JOIN users c3
    ON c3.id = c2.referred_by
LEFT JOIN users c4
    ON c4.id = c3.referred_by
LEFT JOIN users c5
    ON c5.id = c4.referred_by
WHERE u.id = 30

SQL字段

http://sqlfiddle.com/#!2/24694/1

您可以將遞歸用於您的工作。 以下是一個簡單的遞歸代碼,它返回所有祖先,但是如果您想限制要獲取的父母的數量,則可以使用以下代碼創建一個函數,並將參數6(或7)作為參數發送,並檢查是否是否達到了您的特定父母水平。 希望它能工作。 :)

with parents as (
   select id, referred_by
   from users 
   where id = 30
   union all
   select u.id, u.referred_by
   from users u
     join parents p on p.id = u.referred_by
) 
select *
from parents;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM