簡體   English   中英

如何從SQL子查詢返回數組?

[英]How to return an array from a SQL subquery?

我正在嘗試從我的數據庫中查詢人名和他們所有朋友的列表。 為了格式化,我需要將他們的朋友列表放在與其行相鄰的數組中。

這是我的查詢:

$sql = "SELECT CONCAT(r.first_name, ' ', r.last_name) as name, 
          ( SELECT CONCAT(first_name, ' ', last_name) as friend_name 
                FROM friend_list WHERE friend = r.id) as friends 
        FROM friend_list r";

因為人們有多個朋友,我需要這個為每個人返回一系列朋友。 我該怎么做?

在使用下面的腳本之前,我回答了類似的問題。 邏輯將是相同的只是更改表/字段名稱以適合您的;

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',MAX(CASE WHEN UserName = ''' 
                    + p.UserName + ''' THEN FriendName END) AS ' 
                    + QUOTENAME(p.UserName) FROM Popular p
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @query = 'SELECT ' + @cols + ' FROM 
            (SELECT UserName, FriendName
                ,ROW_NUMBER() OVER (PARTITION BY UserName ORDER BY FriendName) AS RowNum
                FROM Popular GROUP BY USERNAME, FRIENDNAME
            ) x
            GROUP BY RowNum'

EXECUTE(@query);

它將導致用戶列與他們的朋友在新行中按此;

╔════════╦══════╦════════╗
║  John  ║ Khan ║ Philip ║
╠════════╬══════╬════════╣
║ Jeremy ║ Lemy ║ Brock  ║
║ Marry  ║ NULL ║ Ursula ║
║ Sarah  ║ NULL ║ NULL   ║
╚════════╩══════╩════════╝

原始線程可以在這里找到; SQL - 聯合表中的所有用戶

(擴展@GordonLinoff的評論)

無法直接檢索數組。 你可以做的是使用GROUP_CONCAT在查詢中生成一個“序列化”數組,然后在你的應用程序中反序列化它。

--EDIT--經過進一步測試,我發現下面的代碼沒有按預期工作。 但序列化然后反序列化的想法仍然存在。

$ sql =“SELECT CONCAT(r.first_name,'',r.last_name)作為名稱,GROUP_CONCAT(CONCAT(f.first_name,'',f.last_name)SEPARATOR'|')作為朋友來自friend_list r JOIN friend_list f ON f.friend = r.id;“ ;

並在PHP中“反序列化”它:

$friendsArray = explode('|', $r['friends'])

暫無
暫無

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

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