這是演示,以便更好地了解問題所在。
以下 sql 查詢僅列印uploaded_file_exti_user_uploads 表中具有 mp3 值的查詢。從查詢中可以理解,in 中的資料i_user_uploads是從表中的post_fileids 中取出的i_posts。
為了更好地理解,我需要做一些澄清。post_file 實際上由表upload_ids中的組成i_user_uploads。例如,post_file 2,14實際上表示upload_idin i_user_uploads。看DEMO中的圖表會更容易理解。
查詢中的輸出應該是這樣的。應遵循 post_file 中的 upload_ids,并將表中的uploaded_file_ext = 'mp3'si_user_uploads列印在螢屏上。
要解釋得更詳細,post_file 1實際上是upload_id 1在i_user_uploads表中。如果uploaded_file_extin this idis mp3,則將其列印在螢屏上。
問題是post_filei_posts 表中的 有時包含多個,id并且這些ids用逗號分隔。例如post_file 15,2,3或post_file 15,2。但cast(P.post_file as signed int) = A.upload_id只取第一個id而忽略ids逗號后的另一個。
如果15inpost_file 15,2,3不是mp3檔案,并且2是mp3擴展名,它會忽略2并且不會列印到螢屏上。
SELECT P.*,U.*,A.*
FROM i_friends F FORCE INDEX(ixFriend)
INNER JOIN i_posts P FORCE INDEX (ixForcePostOwner)
ON P.post_owner_id = F.fr_two
INNER JOIN i_users U FORCE INDEX (ixForceUser)
ON P.post_owner_id = U.iuid AND U.uStatus IN('1','3') AND F.fr_status IN('me', 'flwr', 'subscriber')
INNER JOIN i_user_uploads A FORCE INDEX (iuPostOwner)
ON P.post_owner_id = A.iuid_fk
AND P.post_file <> '' AND A.uploaded_file_ext = 'mp3'
WHERE P.post_owner_id='1'
AND cast(P.post_file as signed int) = A.upload_id
ORDER BY P.post_id
DESC LIMIT 5
uj5u.com熱心網友回復:
而不是CAST()您可以使用FIND_IN_SET()來檢查逗號分隔的字串中是否存在某個值:
WHERE P.post_owner_id='1' AND FIND_IN_SET(A.upload_id, P.post_file)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/468612.html
