Warning: count(): Parameter must be an array or an object that implements Countable in /home/pasokime/domains/mysql.lt/public_html/forumas/include/parser.php on line 820

1 (edited by DY 2007-11-18 03:56:20)

Topic: Skaičiuoti vietoje ar įrašyti į duomenų bazę/failą?

Tarkim yra ~100 įmonių, kurių duomenys perskaičiuojami kiekvieną savaitę ir suvedami į duomenų bazę. Yra apie 15 skirtingų duomenų (pvz. akcijų vertė, jos pokytis, skaičius straipsnių pasirinktoje spaudoje (kuriuose paminėta įmonė - teigiamoje, neigiamoje, neutralioje šviesoje bei bendrai) ir pan.). Kas savaitę reikia sudaryti geriausių kiekvienoje kategorijoje įmonių dešimtukus ir išvesti juos į lenteles. Taip pat puslapiuose apie atskiras įmones parašyti, kurią vietą įmonė pagal kokį kriterijų užima.

Kaip geriausia tai daryti?

Dėl lentelių:
1.Skaičiuoti vietoje (t.y. iš naujo skaičiuoti kiekvienam tinklapį aplankiusiajam su PHP kodu) - iš pažiūros lyg ir resursų švaistymas, kai duomenys atnaujinami tik kartą į savaitę?
2.Padaryti kažkokį PHP scenarijų, kuris išvestų duomenis į kitą, HTML failą (lenteles). Kas kartą atnaujinus duomenis reikėtų paleisti tą PHP failą. Ne taip patogu.

Dėl duomenų kiekvienos įmonės puslapyje:
1.Skaičiuoti vietoje.
2.Padaryti duomenų bazėje atskirą lentelę, su laukais ID, Kriterijus, 1 vieta, 2 vieta, 3 vieta (iki 10 vietos). Padaryti specialų PHP scenarijų, kurį paleisti kas kartą atnaujinus duomenis - jis automatiškai surašytų į duomenų bazę naują eiliškumo tvarką, o atskirų įmonių puslapių PHP scenarijai tik tikrintų, ar ta konkreti įmonė yra pagal kokį nors kriterijų dešimtuke.
3.Kaip 2, tik padaryti dvi lenteles - ID, Kriterijus; bei įmonėsID, vieta, KriterijausID. Nelabai apsimoka turbūt jeigu vis viena tik dešimtukai būtų.
4.Taip pat kaip 2, tik daryti tai atskirame .txt faile kažkokiu formatu (pvz. Kriterijus: įmonės kodas - vieta). Paskui atitinkamais algoritmais tame .txt faile atidarius įmonės tinklapį tikrinti ar ta įmonė yra pagal kažkokį kriterijų dešimtuke.

O gal galima kaip nors dar geriau?

Tinklapis lankomas palyginus nedaug, apie 100 - 500 atidarymų per savaitę (čia kartu paėmus visus įmonių puslapius ir lentelių puslapį, o ne vidutiniškai).

Mintys - blogas apie gyvenimą, politiką, ekonomiką, kultūrą, mokslą ir kitką.
Adventure Lietuva - kompiuteriniai žaidimai, kurie yra meno forma.
Pasaulio šalių himnai - įrašai, žodžiai ir jų vertimai, informacija.

Re: Skaičiuoti vietoje ar įrašyti į duomenų bazę/failą?

Manau geriausia yra tuos duomenis, kurie atsinaujina kas savaite skaičiuoti tik vieną kartą. Jeigu yra konkretus laikas, kada jie turi būti perskaičiuojami tada pasinaudoti cron/ms-scheduler paslaugomis ir nustatyti, kad tuo metu perskaičiuoti reikalingus duomenis. Juos geriausia laikyti patogiu formatu atskiroje lentelėje. Jeigu gerai suprantu tai iš tos lentelės galima gauti reikalingus duomenis apie konkrečią įmonę.

3

Re: Skaičiuoti vietoje ar įrašyti į duomenų bazę/failą?

Tikslaus laiko, kada atnaujinami duomenys, nėra - yra savaitės diena, kada jie paprastai atnaujinami, bet jei žmogus, kuris tai daro, tuo metu būtų labai užsiėmęs, galėtų duomenų bazę atnaujinti ir kitą dieną ar dar kitą. Todėl iš esmės pasirinkus pastarąjį variantą turbūt reikėtų sukurti atskirą PHP scenarijų, kuris paskaičiuotų duomenis bei įrašytų juos į kažkokią duomenų bazės lentelę ir kurį reikėtų paleisti kiekvieną kartą atnaujinus duomenų bazę.

Mintys - blogas apie gyvenimą, politiką, ekonomiką, kultūrą, mokslą ir kitką.
Adventure Lietuva - kompiuteriniai žaidimai, kurie yra meno forma.
Pasaulio šalių himnai - įrašai, žodžiai ir jų vertimai, informacija.

4

Re: Skaičiuoti vietoje ar įrašyti į duomenų bazę/failą?

O ar yra SQL komanda, kuri nustatytų tam tikro skaitinio duomens vietą? Pvz. jei yra lentelė:
1 - 36
2 - 50
3 - 75
4 - 12
5 - 37
Ir paprašytum paskaičiuoti 5 vietą pagal antrą stulpelį, išvestų duomenį "3"?

Mintys - blogas apie gyvenimą, politiką, ekonomiką, kultūrą, mokslą ir kitką.
Adventure Lietuva - kompiuteriniai žaidimai, kurie yra meno forma.
Pasaulio šalių himnai - įrašai, žodžiai ir jų vertimai, informacija.

Re: Skaičiuoti vietoje ar įrašyti į duomenų bazę/failą?

Na tokios funkcijos nėra. Reikia tokį funkcionalumą susiprogramuoti. Iš kur MySQL'ui žinoti ką tu turi omenyje sakydamas "vieta"?

Kažką panašaus galima pasiekti naudojantis skaitliuku:

SET @counter := 0;
SELECT pirmas_stulpelis
FROM(
  SELECT *, @counter := @counter + 1 AS counter
  FROM lentele
  ORDER BY antras_stulpelis ASC
) tmp
WHERE counter = 5