我有一個類似於下面的例子的MySQL問題。MySQL嵌套表記錄編號
- 有兩張人名姓名錶,由他們的護照號碼標識第一張桌子上有父母。
- 第二個表有CHILDREN,與他們的父母護照ID相關聯(我只考慮父母一方 - 父母/每個家庭)。
- 較低的護照ID值意味着一個年輕的人(因此,最年輕的父母具有最低的ID;而第一個孩子出生在一個家庭有孩子中是最低的ID在該家族)
實例表:
父母
PassportID – ParentNAME
098765432 – Kate
– John
111222333 – Mary
兒童
PassportID – ChildNAME – ParentID
211222333 – Peter – 111222333
222333444 – Gabriel –
222222222 – Lara – 111222333
233333333 – Angela –
244444444 – Philip –
255555555 – Michael – 111222333
277777777 – Betty – 098765432
266666666 – Eleanor – 098765432
299999999 – Amanda – 111222333
288888888 – Robert – 111222333
我知道如何加入,這些表進行排序,採用原始ID:
HTTP:sqlfiddle.com /#9/98b5a/1/0
出於某種原因SQLfiddle開始失敗,所以我再次在這個其他很酷的MySQL測試中的例子: http://rextester.com/EYIX74197
但我想顯示簡單的增長數字,而不是顯示原始ID。所以,問題是:
我怎樣才能做一個選擇來自這兩個表,並得到所有這些人拿着幾自動編號列的這顯示人們的基於1的年齡排名的列表,在此方法:
- 最古老的家長將有秩= 1,下一個,秩= 2,和
- 所以 並在每個家庭中最古老的孩子將有秩= 1,未來 一個2,等等。
結果舉例:
ParentAgeRANK - ParentNAME – ChildBornRANK – ChildNAME
1 – John – 1 – Gabriel
1 – John – 2 – Angela
1 – John – 3 – Philip
2 – Kate – 1 – Eleanor
2 – Kate – 2 – Betty
3 – Mary – 1 – Peter
3 – Mary – 2 – Lara
3 – Mary – 3 – Michael
3 – Mary – 4 – Robert
3 – Mary – 5 – Amanda
我想我會需要使用一對夫婦的MySQL變量,@ParentAgeRank和@ChildBornRank的,設置它們的原始值0,再總結各1行,但只有在父ID改變時(在第一種情況下)或者子ID改變(在第二種情況下)。但是,當父id改變時,@ChildBornRank必須重置爲0。 我會知道如何使用PHP腳本來完成此操作,該腳本可以使用PHP變量來評估PassportID並增加排名。
但在這種情況下,我被迫使用純MySQL語句獲得排名列表。
這個想法甚至可能嗎?當另一個變量的值改變時如何處理重置一個變量?
非常感謝你的建議
編輯:
雖然我的例子中只有10行,這是爲了從兩個表約10萬條記錄每一個運行。
@Parfait提供的第一個解決方案的確可以使用幾行;但是當我在現實世界中嘗試它時,我的服務器會掛起。
通過@Parfait第2解決方案做了回「磁盤已滿」錯誤信息,所以我想這是關係到1日評論中的東西這個頁面(太多連接和GROUP BY語句):https://dev.mysql.com/doc/refman/5.7/en/full-disk.html
您的可變意見將比以下提供的第一個(迄今爲止)解決方案更有效率 – Strawberry
感謝您的意見@Strawberry。但關於如何照顧變化和重置的任何想法? – abu