MYSQL query help
 
imp 4. mar 2008 16:03:29 Pridružen od:
11. apr 2007
894 objav
3 1 0
#11

$sql = mysqlquery("SELECT newsid FROM comment ORDER BY datum DESC");

if (mysqlnumrows($sql))

{ while ($komentarji = mysqlfetcharray($sql))

{ extract($komentarji);

echo $news_id;

}

}



?


všeč(0) ni všeč(0) spam(0)
 
twarlock 4. mar 2008 16:03:36 Pridružen od:
17. okt 2006
160 objav
0 0 0
#12

v keri tabeli so novice?


všeč(0) ni všeč(0) spam(0)
 
Vini 4. mar 2008 16:03:39 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#13
SELECT
id,
(SELECT MAX(datum) FROM comments WHERE news_id = news.id) AS maxdatum
FROM
news
ORDER BY
maxdatum DESC;

Nekaj v tem stilu, ampak se zavedaj, da je to blazno neelegantna in pocasna resitev. Vsekakor malo prestudiraj tukaj indekse, o podobni temi (uporaba MAX() v kombinaciji z indeksi) sem pred kratkim pisal na mojem blogu.



Bi ti pa vsekakor svetoval, da razmisljas malo o kaksni reduncanci podatka o datumu zadnjega komentarja v tabeli novic. Zadevo lahko resis tudi tako, da se samodejno azurira, poglej si malo triggerje.


všeč(0) ni všeč(0) spam(0)
 
twarlock 4. mar 2008 17:03:08 Pridružen od:
17. okt 2006
160 objav
0 0 0
#14

kaj pa tkole...



SELECT * FROM news AS n LEFT JOIN comment AS c ON (n.newsid=c.newsid) ORDER BY c.datum DESC LIMIT 10



sevede po predpostavki, da je tabela z novicami: "news" in, da je index: "news_id"


všeč(0) ni všeč(0) spam(0)
 
Vini 4. mar 2008 21:03:57 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#15

twarlock, tole pomoje zanj ni uporabno. Kaj lahko se zgodi, da ima le ena novica zadnjih deset komentarjev, torej bo rezultat te poizvedbe 10 enakih novic. Ce sem fanta prav razumel, ravno tega noce...


všeč(0) ni všeč(0) spam(0)
 
twarlock 4. mar 2008 22:03:57 Pridružen od:
17. okt 2006
160 objav
0 0 0
#16

eh ja zabluzu blush



bom tvoj query mal popravu...


SELECT c.news_id
FROM
news AS n,
coment AS c
WHERE
(c.news_id=n.news_id)
GROUP BY c.news_id
ORDER BY MAX(c.datum) DESC
LIMIT 10
všeč(0) ni všeč(0) spam(0)
 
Vini 5. mar 2008 08:03:00 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#17

Ja, vsekakor, tole bi tudi delovalo. Je pa v obeh primerih query lahko blazno pocasen, sploh ob veliki kolicini podatkov, seveda. Nekako se vedno priporocam resitev z zapisovanjem podatka o datumu zadnjega kometarja v tabelo novic.


všeč(0) ni všeč(0) spam(0)
 
blackmamba 5. mar 2008 08:03:57 Pridružen od:
4. mar 2008
559 objav
392 25 11
#18

Super!! Uporabil sem twarlock-ovo rešitev in deluje. Komentarjev je zaenkrat še malo, tako da zaenkrat deluje hitro. Se pa strinjam da lahko zadeva postane požrešna in počasna.



Vini: Hvala za nasvet, si bom pogledal triggerje. Če pravilno razumem je to neke vrste procedura, ki se izvede ob vpisu vsakega komentarja in sicer zapiše id zadnjega komentarja v tabelo novic. Potemtakem bi bil query lepši, če bi novica imela 'id' zadnjega komentarja



SELECT n.newsid FROM news AS n, comments AS c

WHERE n.news
id = c.newsid

AND n.comment
id = c.comment_id

ORDER BY c.datum DESC



LP


všeč(0) ni všeč(0) spam(0)
 
Vini 5. mar 2008 12:03:24 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#19

blackmamba, tako je, na tabelah lahko dolocis triggerje, ki se izvedejo pred/po insertu, updatu ali deletu. Za tovrsten query bi ti vsekakor svetoval, da si v tabelo novic zapisujes datum zadnjega komentarja, ker bos lahko tabelo po tem podatku tudi indeksiral in tako omogocil queryju, da za sortiranje podatkov uporabi indeks, kar je hitreje kot uporaba filesorta. Da se ne ponavljam, o tem sem pisal na blogu, pa si rajsi kar tam preberi podrobno razlago. Povezava na objavo je v mojem prvem odgovoru v tem threadu.


všeč(0) ni všeč(0) spam(0)
 
blackmamba 5. mar 2008 13:03:11 Pridružen od:
4. mar 2008
559 objav
392 25 11
#20

Hvala, bom tako naredil in v kratkem poročam.



LP


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se