Új hozzászólás Aktív témák

  • cucka

    addikt

    válasz Soak #10334 üzenetére

    Egy ilyen sql-el érdemes elindulni:
    select events.* from events where users_id in (select friend_id from relations where users_id={$user_id}) order by dateofcreation asc

    Az in()-ben található lekérdezés kiszedi a $user_id-hez tartozó barátok azonosítóját (ide php-ban be kell helyettesíteni a $user_id változót. A külső lekérdezés meg egyszerűen listázza az events táblát, leszűrve a megfelelő felhasználói azonosítók szerint. Ha a barát adataira is szükség van, akkor bejoin-olod a users táblát is és kész.

    A te php-s megoldásod annyi soron megy végig, amennyi a userek és a relációk számának szorzata, tehát az algoritmusod négyzetes.
    Ebben az sql-es megoldásban a belső lekérdezés csak egyszer fut le és az index miatt logn időben végez, a külső lekérdezés pedig végigfut az összes soron, de egy index létrehozásával ezt szintén meg tudja oldani logn időben.
    Gondolatkísérlet: tegyük fel, hogy nő az oldalad látogatottsága. Tegyük fel, hogy az eredetihez képest tízszer annyi felhasználó van, ami mondjuk húszszor annyi relációt jelent. Ez esetben:
    - az én lekérdezésem nagyjából ugyanannyi idő alatt végez a kereséssel, mint előtte
    - a te php-s megoldásod 200-szor ( :Y ) annyi műveletet fog végezni, mint előtte

    [ Szerkesztve ]

Új hozzászólás Aktív témák