[英]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.