Home › Forums › Informacija › Puslapis perkeltas
- This topic has 46 replies, 10 voices, and was last updated 8 years, 9 months ago by agniusm.
-
AuthorPosts
-
2015/10/19 at 12:17 #11826ŠarūnasKeymaster
Truputį ne mano sritis, tai užklimpau su duombaze. Yra čia gal MySQL liūtų?
2015/10/19 at 15:00 #11830TyroParticipantNesakysiu jog liutas ar pan, bet gal galiu padeti kuo nors? Su MySQL draugauju.
2015/10/19 at 15:35 #11831ŠarūnasKeymasterČia yra užklausa, kurią iki šiol naudojo mano rašytas “recent activity” pluginas:
http://pastebin.com/8rg5XB1H
Užklausos esmė, kad ji atrenka 12 naujausių temų, o tam atrenka visus naujausius forumo ir blogo postus ir komentarus. Tada viską sudėlioja pagal laiką ir sugrūpuoja į temas. Mintis yra temą sąraše rodyti tik vieną kartą, kad ir kiek diskusijų joje vyktų.
Gal ne pati gražiausia implementacija ir veikė lėtokai, bet veikė… Problema, kad ORDER BY negali eiti prieš GROUP, tai rezultatas – pirma papuolus eilutė iš grupės. Iki perkėlimo į naują serverį buvo senesnė MySQL versija, kuri kažkodėl veikė kiek kitaip.
Jei pašalinu eilutę su GROUP BY, viskas veikia gražiai, tik aišku gaunu pavienius komentarus, nesugrūpuotus į temas.
Dabar man reikia šią užklausą modifikuoti taip, kaip GROUP grąžintų tas eilutes, kuriose post_id yra didžiausias. Radau visokių pavyzdžių su max(post_id) ir panašiai, bet mano atveju užklausos eina iš kelių skirtingų lentelių ir rezultate nesigauna nieko. Bandžiau net visokias laikinas lenteles kurt. :)
Jei būtų kokių idėjų, o jei net ir kažką gatavo puregztum.. būtų šaunu. :)2015/10/19 at 17:23 #11832serafanasParticipantO tavęs nedomina išsiimti 12 naujausių temų ir likusį darbą padaryti su PHP? :) Nes tiek JOIN’ų, GROUP BY ir pan tikrai bus lėčiau laiko prasme nei PHP pratikrint masyvą.
2015/10/19 at 17:50 #11833ŠarūnasKeymasterNa matai, 12 naujausių temų nebūtinai reiškia 12 šviežiausių diskusijų :) T.y. pavyzdžiui, gali būti šviežiai sukurtos 5 naujos temos, bet visos diskusijos vyks senose… Arba kažkas parašys į metų senumo temą ir jos iš vis nepamatysime sąraše. Imt 12 naujausių pranešimų irgi neišeina, nes visi jie gali būti vienoje temoje…
Galvojau įvairius variantus, bet sunkiai sekėsi sprendimą rast, dėl to ir gavosi toks gargaras. Šiaip lėtokai veikia ir tikrai yra vietos optimizavimui, bet dar nėra taip blogai, kad kiltų problemų. Jei puslapio lankomumas pakiltų 1000 kartų, tada gal ir būtų bėdos. O kol kas – neverta gaišti laiko.2015/10/19 at 18:37 #11834TyroParticipantApkrauti SQL labai dažnai yra paprasšiau nei PHP, nes jis dirba efektyviau ir gauni tai ko nori, tik kartais ne iš karto pavyksta atlikti tai ko nori. Užklausa visai normali, gal tik reikia aptvarkyti index’us jeigu trūksta greičio. Vėliau pamėginsiu pasiųlyti savo variantą. Esu daręs panašių užklausų, dažniausia prisireikia susikurti tempinę sql lentelę.
2015/10/19 at 18:48 #11836NedParticipantPabandyk toki varianta
http://pastebin.com/Fa1r8CEm
sintaksės netikrinau, bet turi veikt2015/10/19 at 20:00 #11838NedParticipantoi, klaida
pakeis eilute ‘max(post_date) as max_post_date’
i
‘max(if(com.comment_approved = ‘1’, unix_timestamp(com.comment_date), unix_timestamp(p.post_date))) as max_post_date’2015/10/19 at 20:06 #11839ŠarūnasKeymasterSu šituo variantu visos 12 temų tarpusavyje išsortinamos kaip ir gerai, bet eilučių turinys vis tiek neatitinka realybės… Kiek aš mačiau pavyzdžius, tai prieš grupavimą tiesiog bando grąžinti visas vertes atitinkančias eilutės, kurioje yra max vertė. Tada jau yra garantija, kad grupuojant duomenys bus teisingi, net jeigu išsirinks randominę eilutę. Arba gal dar kažkaip galima..
2015/10/19 at 21:59 #11840NedParticipantSunku redaguot notepadu. :) Lengviau butų prisijungus prie DB. Jei jau niekaip neišeis sakyk, prisijungsim kaip nors ir sutvarkysim.
2015/10/19 at 22:30 #11841NerijusParticipantna jei eilutes kartojasi tai reiktu “select distinct” . ps 3 lentenlės ir 4 joinai kažkas įdomaus . beje kokios sql versijos ?
Ned “order by max(kazkas)” kaip ir nelabai turi prasmės .
nesu tikras kad gerai bet gal veiks
select *.coments , *.post as m where coments.postid= post.id left join on m.userid=users.id group by post.parent ORDER BY post_date DESC
LIMIT 0,122015/10/20 at 00:26 #11847TyroParticipantImetu savo versija, manau turetu veikti.
linkasKelios lenteles jungiames daugiau nei 1 karta nes kartais taip reikia :) Siuo atveju manau tai del to nes vienais atvejais gali mums pargrazinti nauja tema, o kitais – atsakymas i sia ar kita tema. Ir atsakymas neturi temos pavadinimo (reikia prisijungti pacia tema jog gauti pavadinima kuri rodysim vietoje teksto kaip kad ‘atsakymas i kazkokia tema’). Na strukturos nesigilinau per daug, bet pasirode jog yra kaip aprasiau.
2015/10/20 at 08:13 #11851ŠarūnasKeymasterPasibandžiau. Iš esmės tai neveikia. :)
Pirmas dalykas, ORDER BY prieš GROUP nieko nekeičia, nes GROUP neatsižvelgia į duomenų eiliškumą. Tai rezultate man rodo seniausių temų pirmus atsakymus, o ne naujausių paskutinius (tiesiog taip gaunasi, kai randomu parenka duomenis (na gal ne randomu, o paeiliui iš DB)). Po GROUP BY įdėjus ORDER BY, temas rodo naujausias, bet atsakymus seniausius. :)Dėl sudėtingumo Tyro pastebėjimas yra teisingas. Turime 4 tipų pranešimus: blogo postai, blogo komentarai, forumo temos, forumo temų atsakymai. Visi šie duomenys yra pateikiami šiek tiek skirtingai ir išsibarstę per dvi lenteles. Taipogi dar reikia gauti userių informaciją: vardą, nuorodą į profilį. Tai ir gaunasi, kad reikia joinint 3 lenteles ir tada jose kapstytis. Tenka pripažinti, kad gana sudėtinga užklausa, gal dėl to ir nėra tokio paruošto plugino wordpressui…
Su SELECT DISTINCT manau irgi galima kažkaip, su užklausa užklausoje ar net trigubo lygio užklausa, bet įvertinus bendrą sudėtingumą ne taip paprasta pasidaro. :)
Gal paruošiu kokią demo duombazę su phpMyAdmin prieiga, bus paprasčiau… Tik pirma reikia apdoroti duomenis, kad neliktų userių privačios informacijos.2015/10/20 at 09:03 #11853NerijusParticipanto ar ne geriau vietoj vienos užklausos daryt 2 – pirmą – blogo postai , blogo komentarai , antrą -forumo temos ir jų atsakymai .
2015/10/20 at 09:05 #11854ŠarūnasKeymasterParuošiau testinę duombazę. Prisijungimas:
https://kirtiklis.serveriai.lt/MyAdmin/
user: emonlt_test
pass: Emotion123Tai yra naujausia duomenų kopija: tik reikalingos lentelės, userių asmeniniai duomenys ir seni, testui nebūtini pranešimai yra pašalinti.
Redagavimo teisių nėra, tai galima drąsiai bandyti visokius dalykus.Kas nedirbęs su phpMyAdmin: užklausą rašyti į laukelį Query.
2015/10/20 at 16:48 #11872NedParticipantTestuojam
http://pastebin.com/1XS4EEMS2015/10/20 at 20:08 #11879ŠarūnasKeymasterDėkui, jau kažkas į tą pusę, forumo žinutes lyg ir normaliai rodo. Tačiau blogai veikia blogo komentarai, pvz.: http://e-motion.lt/2015/05/05/elektromobiliu-lenktynes-vilnius-palanga/comment-page-1/#comment-2751
Tema atsiranda activity viršuje, tačiau komentaras visai neaišku iš kur paimtas, gal iš kitos lentelės su tuo pačiu ID. :)2015/10/20 at 22:23 #11883NedParticipantTruputi pakoregavau. Patikrink. Nors jau vėlu, makaulė nebdirba.
http://pastebin.com/ruvRKKwA- This reply was modified 9 years, 3 months ago by Ned.
2015/10/20 at 23:09 #11885sopkisParticipantToks klausimas. Kadangi kompiuteriu retai naudojuosi, tai forumą naršau telefonu. Seniau naudojau Android Opera mini, bet teko atsinaujinti, nes senesnė versija pradėjo smiginėti be priežasties. Tik tiek kad su dabartine naršykle užkrauna mobilią versiją, ir tas aktualus, bet nelemtas recent activity atsirado labai apačioje, nors seniau buvo aiškiai matomas puslapio viršuje po dešine. Yra kokie paprasti veiksmai, kad telefone matyti tokį patį vaizdą kaip ir kompiuterio ekrane?
2015/10/21 at 08:05 #11887ŠarūnasKeymasterAčiū Ned, paleidau. Rezultatas geresnis, tačiau blogo komentaruose rodo nulinį atsakymų skaičių. :)
Sopki, čia yra “adaptive” templeitas, kuris prisitaiko prie mažo ekrano ir dešinį stulpelį numeta apačion. Jei nori “desktopinio” varianto, naršyklės nustatymuose pasirink “request desktop site” ar kažkaip panašiai, visi savaip vadina. :) -
AuthorPosts
- You must be logged in to reply to this topic.