這是上一個修訂後的問題。自從範圍發生變化以後,我決定提出一個新問題。在一行內匹配不同的值II
這就是我想要實現的。
在「作者」列中列出該作者的姓氏,該作者的姓氏將首先列出,後面(作者逗號後)是作者列出的第二個姓名如果有的話;如果有第三個作者,則將其放在第二個作者的名字後面。 au_ord列(1 =第一作者,2 =第二作者,3 =第三作者)列出書籍作者的順序。
任何想法如何在MYSQL輸出中實現這一點?
那些是源表。所需的輸出是這樣的:
這是上一個修訂後的問題。自從範圍發生變化以後,我決定提出一個新問題。在一行內匹配不同的值II
這就是我想要實現的。
在「作者」列中列出該作者的姓氏,該作者的姓氏將首先列出,後面(作者逗號後)是作者列出的第二個姓名如果有的話;如果有第三個作者,則將其放在第二個作者的名字後面。 au_ord列(1 =第一作者,2 =第二作者,3 =第三作者)列出書籍作者的順序。
任何想法如何在MYSQL輸出中實現這一點?
那些是源表。所需的輸出是這樣的:
所有你需要的是一個GROUP_CONCAT函數。
SELECT title_id, GROUP_CONCAT(au_lname ORDER BY au_ord)
FROM table
GROUP BY title_id
的GROUP BY
條款組中的所有個人(不同)冠軍,並在其上的GROUP_CONCAT
它們連接起來,這一切的作者。這將列出所有標題及其相應的作者。如果au_lname
來自另一個表,而不是來自title_id
表,那麼您將不得不使用適當的連接。我不確定你的問題中的表名是什麼。
這應該給你的第一個樣本輸出:
SELECT title_id, au_ord, au_lname
FROM title_authors
LEFT JOIN authors
ON authors.au_id = title_authors.au_id
WHERE title_id = 'TC7777'
ORDER BY au_ord;
,這應該給第二:
SELECT title_id, GROUP_CONCAT(au_lname ORDER BY au_ord SEPARATOR ', ')
FROM title_authors
LEFT JOIN authors
ON authors.au_id = title_authors.au_id
GROUP BY title_id
HAVING title_id = 'TC7777';
我不認爲這裏需要'SEPARATOR'關鍵字。 'GROUP_CONCAT'自動用逗號分隔你。 – nawfal
@nawfal:您說得對,逗號是「GROUP_CONCAT」的默認分隔符。然而,在這個答案中,分隔符是一個逗號,後跟一個空格。 –
這是上一個問題的鏈接http://stackoverflow.com/questions/13126011/matching-different-value-within-one-row/13126415#comment17849651_13126415 – ocinisme
你可以發佈樣本值和所需的輸出嗎?這通常比文字描述更有幫助。 – nawfal
發佈花花公子!我希望現在更清楚。 – ocinisme