Autor Zpráva
finchCZ
Profil
Zdravím,

pracuji pomalu na svém skromném cms systému, v jedné tabulce mám seznam uživatelů, v druhé příspěvky. Každý uživatel má své id, které se ukládá u příspěvku, místo jeho nicku. Na přední straně webu, je seznam všech článků, jejich nadpis, autor, datum a "číst dál..." U každého samotného článku je jeho obsah, nadpis, jméno autora a kdy byl článek vydán. Tohle mi vše (konečně) funguje, ale můj dotaz jen zní, zdali by tato funkce (dávám ji níž) šla udělat jednodušeji, případně jaké tam jsou (pokud tam jsou) chyby.

function getClanky() {
    $tab = "wp_posts";
    $tab2 = "wp_users";
    $idClanku = $_GET['clanek'];

    if (isset($idClanku)) {
        /* -----------------> Jeden samotny clanek <-------------------*/
        
        $query = mysql_query("SELECT * FROM $tab WHERE id = '$idClanku' ") or die (mysql_error());

        $Clanek = mysql_fetch_assoc($query);
        $nadpis = $Clanek["post_title"];
        $obsah = $Clanek["post_content"];
        $datum = $Clanek["post_date"];
        $idClanku = $Clanek["ID"];
        
        $qUsr = mysql_query("SELECT wp_users.user_login FROM $tab2, $tab WHERE (wp_users.id = wp_posts.post_author) AND wp_posts.ID = '$idClanku' ");
        $qUsrName = mysql_fetch_assoc($qUsr);
        $author = $qUsrName['user_login'];

        echo "<div class='clanek'><h2>".$nadpis. "</h2><br>" . $obsah . "<br/>Napsal: ".$author." dne ".$datum."</div></div>";
    } else {
            /* -----------------> Prehled vsech clanku <-------------------*/
        
        $query = mysql_query("SELECT * FROM $tab ORDER BY id DESC") or die (mysql_error());
        while ($Clanek = mysql_fetch_assoc($query)) {

            $nadpis = $Clanek["post_title"];
            $obsah = $Clanek["post_content"];
            $datum = $Clanek["post_date"];
            $idClanku = $Clanek["ID"];
            
            $qUsr = mysql_query("SELECT wp_users.user_login FROM $tab2, $tab WHERE (wp_users.id = wp_posts.post_author) AND wp_posts.ID = '$idClanku' ");
            $qUsrName = mysql_fetch_assoc($qUsr);
            $author = $qUsrName['user_login'];
            
            if ($author == "") {
                $author = "Anonym";
            }

            echo "<div class='clanek readerSize2'>" . $nadpis. " <br /><span style=\"font-size: 8pt; font-family: arial\"><u>napsal</u>: <strong>" . $author. "</strong> <i> " . $datum . "</i></span> <a href=\"index.php?clanek=" . $idClanku . "\" style=\"float: right\" title=".$nadpis.">...celý článek</a></div>". "<br />";   }
        }
    }

Jediné, co mě snad napadá, je toto

            $qUsr = mysql_query("SELECT wp_users.user_login FROM $tab2, $tab WHERE (wp_users.id = wp_posts.post_author) AND wp_posts.ID = '$idClanku' ");
            $qUsrName = mysql_fetch_assoc($qUsr);
            $author = $qUsrName['user_login'];

obalit do funkce, ale nevím, jestli je to zbytečné, nebo jestli by se ušetřil čas/výkon web serveru?

Děkuji za jakýkoliv názor, radu.
Tori
Profil
Spojila bych oba selecty dohromady, aby se vám vrátily články a zároveň info o jejich autorech. Může to být jeden dotaz a jeden cyklus pro výpis, přičemž pokud je zadané ID článku, tak ho jen doplníte do dotazu. (Asi bych místo FROM tab1, tab2 WHERE ... použila spíš FROM tab1 INNER JOIN tab2 ON ..., ale nevím, jestli to díky optimizéru nakonec není stejně efektivní.)
finchCZ
Profil
děkuju, tohle je opravdu jednodušší :)
Tori
Profil
Ještě jsem si všimla: to ID předávejte funkci jako nepovinný parametr (=zbavíte se závislosti) a před vložením do SQL ho přetypujte na číslo. Před výpisem nemusíte kopírovat proměnné (ř.12-15), klidně použijte rovnou to pole vrácené mysql_fetch_assoc. Místo inline stylů bych použila třídy, některé prvky by určitě šlo zaměřit i podle třídy rodiče div.clanek a { float: right; }.
finchCZ
Profil
díky ty nápady jsou super, ty inline styly mám jen na testování :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0