Autor Zpráva
DJ
Profil *
Ahoj,
mám funkci, která počítá, kolik lidí dalo danému článku "Like". Funguje to následovně: pokud už článek nějaký "Like" má, tak už v tabulce (top_likes(id_article,nr_likes)) je. Tudíž je třeba jen zvětšit hodnotu v sloupci nr_like. Takže zjistím pomocí SELECTu počet ($result), zvětším ho o 1 a dám UPDATE. Dá se toto udělat jednodušeji, jen jedním příkazem?
A druhá varianta je: pokud článek ještě žádný "Like" předtím nedostal, musí se vytvořit nový záznam v tabulce (odpovídá tomu podmínka else v kódu níže). Funguje to správně, záznam to uloží, ale díky if($result = mysql_result($query,0)) se vypíše warning... Jak se to dá šikovně ošetřit?
Děkuji za odpovědi, zde je skript

$query = MySQL_Query("
      SELECT nr_likes 
      FROM top_likes
      WHERE id_article = '$id_article'
    ");

    if($result = mysql_result($query,0))
    {
      $result++;
      $query2 = MySQL_Query("
        UPDATE top_likes
        SET nr_likes = '$result'
        WHERE id_article = '$id_article'
      ");
    }
    else
    {
      $query2 = MySQL_Query("
        INSERT INTO top_likes
        VALUES ('$id_article','1')
      ");
    }
Tori
Profil
DJ:
Jde to všechno jedním dotazem, předpokládá se UNIQUE index na sloupci id_article (aby se nemohlo vyskytnout dvakrát stejné ID):
INSERT INTO top_likes (id_article, nr_likes) VALUES ($id_article, 1) 
ON DUPLICATE KEY UPDATE nr_likes = nr_likes+1
DJ
Profil *
Tori:
Paráda. A šlo by něco podobně jednoduchého a krásného i opačně? Tj. nr_likes o jedno zmenšit (pokud je nr_likes>1), v případě, že je tam like jen jeden, tak rovnou smazat řádek?
DJ Miky
Profil
Jde to vyřešit dvěma dotazy:
UPDATE top_likes SET nr_likes = nr_likes - 1 WHERE id_article = 123 AND nr_likes > 1 LIMIT 1

A následně, pokud mysql_affected_rows() vrátí nulu (nr_likes je rovno jedné nebo záznam pro článek 123 vůbec neexistuje), zavolat:
DELETE FROM top_likes WHERE id_article = 123 AND nr_likes <= 1 LIMIT 1

Tím se zavolá jeden až dva dotazy podle situace.

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