webForumDet fria alternativet

Omskrivning av SQL-fråga

3 svar · 357 visningar · startad av lillebror

lillebrorMedlem sedan apr. 20041 597 inlägg
#1

Hej,

Jag har en SQL-fråga som ger väldigt långa svarstider. I början när innehållet låg på en relativt låg nivå i databasen var svarstiderna acceptabla men i takt med att innehållet har växt har svarstiderna blivit längre och längre. Jag misstänker att databasfrågan är felkonstruerad.

Så här ser den ut:

SELECT DISTINCT (SELECT username FROM tblmember WHERE memberID = t1.friendID) AS friendusername, (SELECT memberID FROM tblmember WHERE memberID = t1.friendID) AS memberID, (SELECT DATE_FORMAT(last_visit, '%Y-%m-%d %H:%i') FROM tblmember WHERE memberID = t1.friendID) AS datetime, (SELECT memberID FROM tblonline WHERE memberID = t1.friendID) AS online, (SELECT activity FROM tblonline WHERE memberID = t1.friendID) AS activity FROM tblmyfriends AS t1, tblmember AS t2, tblonline AS t3 WHERE t1.memberID = 1 AND t2.suspended = 0

Förslag på hur jag skulle kunna skriva om den?

jawbreakerMedlem sedan jan. 2003296 inlägg
#2

MySQL?

SELECT t2.username AS friendusername
, t2.memberID
, DATE_FORMAT(t2.last_visit, '%Y-%m-%d %H:%i') AS datetime
, IFNULL(t3.memberID, 0) AS online
, IFNULL(t3.activity, '') AS activity
FROM tblmyfriends AS t1
INNER JOIN tblmember AS t2 ON t2.memberID = t1.friendID
LEFT OUTER JOIN tblonline AS t3 ON t3.memberID = t2.memberID
WHERE t1.memberID = 1
AND t2.suspended = 0

borde fungera tycker jag. Men det är svårt när man inte vet exakt hur tabellerna ser ut så att man kan testa ordentligt.

Jag tog bort DISTINCT, för jag antar att friendID och memberID tillsammans är primärnyckel för tabellen tblmyfriends?

lillebrorMedlem sedan apr. 20041 597 inlägg
#3

jawbreaker skrev:

MySQL?

Det stämmer bra det!

jawbreaker skrev:

Jag tog bort DISTINCT, för jag antar att friendID och memberID tillsammans är primärnyckel för tabellen tblmyfriends?

De utgör tillsammans primärnyckel, rätt gissat!

Du, det smällde bara till på en gång när jag körde frågan i phpmyadmin. Kanon!

Tack så mycket för hjälpen! :) Den tidigare koden är och har inte varit helt optimerad. Det har jag kunnat konstatera en längre tid. Nu sker profilvisningen på Flygfyren med ljusets hastighet!

Vad var det i SQL-koden som inte var bra? Blev det någon konstig loop/slinga?

jawbreakerMedlem sedan jan. 2003296 inlägg
#4

Gött! Och varsågod :)

128 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)