Haszprus

Születésnapos dumagépek

©   Haszprus   |   fejlesztés howto sql

Shamalt sajnos ehhez már túl öreg, de ha nem maradt volna le róla, akkor így indulna a Születésnapos dumagépek doboz, a szemléltetés kedvéért.

Ez a feature csak a nagyobb topicokban és a megfigyelőközpontban fog titeket rettegésben tartani.

A doboz mögött egyébként egy osztály, némi adatbázis, egy html fájl, és egy csodaszép 13 soros sql lekérdezés áll. Beágyazott lekérdezések rule! Istenem, mennyire jó hogy mysql verziót váltottunk + szglab5 rulez da world, akármekkora szopatás is!

select   u_id, u_pubnick, round(fage) as age, comment_count
from     (
         select   u_id, u_pubnick, u_regged, u_lastload,
                  (to_days(now()) - to_days(u_regged))/365 as fage,
                  count(k_id) as comment_count
         from     hb_users, hb_komment
         where    to_days(now()) - to_days(u_regged) between 355 and 370
              and k_uid = u_id
         group by k_uid
         ) as subquery
where    to_days(now()) - to_days(u_lastload) < 365 
      or comment_count >= 2
order by age desc

Egész biztos vagyok benne, hogy a fenti sql query több érdeklődő olvasómnak is rejteget újdonságokat, ezért remélem nem haragusztok, hogy beidéztem

RSS: hozzászólások ehhez a bejegyzéshez 31 hozzászólás

Szólj hozzá Te is!


A 365-tel osztás valójában egy kis pontatlanság, azonban csak olyan hosszú idő alatt jön elő a problémája, amennyi ideig nem is biztos hogy a blogom létezni fog… Majd 1x talán átírom.

hat igen, a 3as mysql felett mar kicsit eljart az ido

Egy kérdés: ez a kérés mennyi idő alatt szalad le?

Mefi Nem tudom. Naponta egyszer fut le. Amúgy bizonyosan 0,1 mp alatt van.

Shamalt Ez nem is kérdéses, dehát sajna nem az én fejlesztési szükségleteim az elsődlegesek errefelé De hálát adok az égnek hogy végre váltottunk 4-esre és szglab5-öt is pont most tanulunk

Mefi Mefi, lemértem, 100x lefuttatva 10,03 mp.

Haszprus Hát.. a win2k probléma is így kezdődöt

win2k LOL gyorsan írok ide hogy ne javíthasd át

tudom egyébként mindig ez jut eszembe amikor valamit picit felületesen kezelek le


phpból kezeled közvetlen az sql-t, vagy használsz valami köztes layert?

Lehet én vagyok a buta, de nem értem. Máshogy nem lehet kezelni az SQL-t ,ha PHP alapon van a motor. Azaz lehet, de nincs értelme.

Közvetlenül php-ból. Milyen köztes layerre gondoltál?



De ha jol latom ez az ADOdb gyakorlatilag tok ugyanaz, mint amit az ember elete elso php scriptjeben megir: alapveto adatbaziskezo rutinok. Szvsz ezeket jo, ha egyszer megirja maganak az ember, legalabb latja kozelrol, hogy mi hogy megy. Aztan persze lehet include-olni oket kesobb.

Megkérdezhetem NeoXon, hogy konkrétan milyen rutinokat tartasz alapnak include-olgatni az ember első php scriptje óta? (Nem azon van a hangsúly hogy az első script óta, hanem hogy milyen rutinok)

Mondjuk egy BB Kód kezelő függvényét.

Adatbázis-kezelő rutinokra gondoltam

Na most megnéztem alaposabban hogy mit tud az ADOdb. Meg kell vallanom, hogy nálam így néz ki egy tipikus db-lekérdezés:

$rs = mysql_query(
        select ...
       
) or die(mysql_error());

if ($rs && mysql_num_rows($rs)) {
        ...
        for ($i = 0; $i < mysql_num_rows($rs); $i++) {
                $row = mysql_fetch_array($rs);
                ...
        }
        ...
}


Lehet, hogy alkotok majd valamit hogy ne legyen a kód mysql-specifikus, bár azt feltételezem, hogy a többi adatbáziskezelőnél is rendelkezésre állnak ezek* a függvények, tehát szvsz egy replace all-lal az egész forráskód átírható db-váltáskor, anélkül, hogy állandóan köztes függvényekkel terhelnénk az oldalt.

* mysql_query, mysql_error, mysql_num_rows, mysql_fetch_array bizonyára mind létezik mysql helyett egyéb db-hez írt változatban is. Ha meg nem, akkor legkésőbb váltáskor replace all-ozhatom a saját függvényeimre

Sztem.

Szerintemet ne használj, mert Balázs nem szereti ;]

Jah. Nekem pl. van egy mysql_counter(); függvényem, amit nagyobb számolásokra használok.


Haszprus: replace all hidd el, nem elég, én már próbáltam mySQL backendről PostgreSQL-re áttérni, a query-k felét is újra kellett írni.

Tamás Tamás, magát a queryt? Mármint a select (stb) utasításokat? Ezen mit segít ha saját függvényeket használok a mysql_* helyett?

Vagy ha nem ezt, akkor miért nem volt elég a replace all?

Haszprus: az egyszerűbb selecteket nyilván nem, de mondjuk pl PostgreSQL-ben nincs AUTO_INCREMENT, hanem triggerekkel van megoldva, meg egy kicsit más SQL dialektust beszél (lásd még: Oracle-ben sincs LIMIT, van helyette WHERE ROWNUM, ugye). ezen konkrétan mondjuk nem egy szimpla ADOdb segít, az csak akkor jó, ha viszonylag egyszerű a query-d. ami szerintem segít, az egy négyrétegű architektúra. legalul van az adatbázis engine, fölötte az ADOdb, afölött egy halom saját készítésű függvény, amelyik a query-ket küldözgeti az ADOdb interfészen keresztül, és legfelülmaga a programod. minden réteg csak az alatta lévő réteg hívásait használja, így ha engine-t cserélsz, kis szerencsével nem kell átírni semmit, kicsit kevesebb szerencsével pedig a query-jeidet csesztetni kell egy-két helyen. (például a LIMIT vs WHERE ROWNUM problematika tipikusan egy olyan dolog, amit egy megfelelően absztrahált DB interfész el tud fedni, mert te paraméterként adod át a query-függvényeidnek, hogy mettől meddig kéred az eredémnyt, aztán majd a DB interfész eldönti, hogy ebből egy WHERE ROWNUM-os klózt kell csinálnia, vagy egy LIMIT-est).

persze be kell vallanom, hogy ilyen négyrétegű megoldást még soha a büdös életben nem csináltam, mert: 1. kurva lusta vagyok, 2. egy idő után elegem lett a PHP-s webprogramozgatásból.

haszp: http://phplens.com/lens/adodb/docs-adodb.htm#ex7

csekkold ezt a példát, pl ilyeneket tud, mondjuk énsevagyok az adodb mestere, meg elég felületesn használom (már ha phpból kell sqleznem)
jódolog az adodb
btw megjelenitésre használsz valami template enginet, smarty, etc?

Smartyval szemezgetek már egy ideje, de nem. Valszeg nincs a szerveren, de épp néhány órája kérdeztem meg h jól sejtem-e… Ha van, akkor mindenképp ránézek hamarosan.

Update, a saját gépemre felmászott időközben

Uff, megnéztem milyen a cache-elt php amit ez előállít. Hát finoman fogalmazva nem szép látvány

hm? nemkell fennelnni a serveren, te is feltudod rakni ahogy bármilyen phpcodot
btw nemszéplátvány: most hogy oldod emg a megjelenítést: kiechozod a html-t, vagy használsz valami template enginet? mert ha csak echo, azis szép látvány lehet

Próbálom az echoimat logikusan kezelni, pl. egy kommenthez tartozó kiíró rész most így néz ki:

echo
   <br />
   <div class='u_pic' id='i$i'>
      $avatar
   </div>
   <div class='komment $class' $style id='k$row[k_id]'>
      <div class='nev'>
         <span class='sorszam'>$i) </span>
         $nev $web
      </div>
      <div class='k_datum'><a href='#k$row[k_id]'>$datumido</a>
      $moderator_checkbox
      </div>

      <div class='szoveg'>
         $szoveg
      </div>
   </div>
   <div class='clear'></div>
   
;


Szerintem emészthető Természetesen vágom hogy smartyval még emészthetőbb. Nomeg ezt a kódot is picit elő kell készíteni (ld. $avatar, $web, stb.)

De most hogy mondod hogy fel tom rakni, el is kezdek vele szórakozni talán itt is nem soká

Ennek a ficcsnek mi a lényege?

A Smartynak? Az hogy elválasztja az application logic-ot a megjelenítési rétegtől. Ebből következően:
a) a design és a php fejlesztője könnyebben lehet külön ember
b) a későbbiekben könnyebb lecserélni a designt mert a php-hez nem kell hozzányúlni

Vagy a születésnapos dumagépeknek? Annak kb. semmi, kiírja azokat akik n éve regisztráltak és szóltak is valamit és jártak is itt az elmúlt 1 évben


haszp, ez a echo kétszoszsoros qrvasokminden nemtúl hatékony
mert ami php-ban közt van, azt végigparsolja (változók, stb), ami meg csak '' közt azt simán echozza
fyi
amúgy smarty rules everything around me (SREAM)

Egyébként erről (nrg) van egy cikk (teszt) a weblaboron, gyakorlatilag zéró jelentősége van a dolognak.
Hozzászólásod:


Nem vagy bejelentkezve, de...

A)
hozzászólhatsz regisztrálatlanul...

B)
ha regisztrálva vagy, bejelentkezhetsz...