Autor Zpráva
Smoother
Profil
Ahoj,
mám trapný požadavek na výběr počtu aktuálních článků z db. Tedy porovnávám aktuální datum s uloženou platností v db. V tom problém ale není. Uvedený dotaz vrátí počet všech článků v databázi (včetně starých). Tak mě napadá, zda neuvidíte chybu, nebo neznáte nějaké elegantnější řešení. Díky předem
Smoother

include 'db-connect.php';
$aktdate=date("Ymd");
$pocet=mysqli_fetch_assoc(mysqli_query($db_spojeni,"SELECT COUNT(polozka) AS pocet FROM zpravy WHERE platnost >= '.$aktdate.'")); 
if ($pocet['pocet'] == 0) {
          echo 'Zadne clanky';
              } else {
             echo '<b>('.$pocet['pocet'].') clanku</b>'; 
              }
TomášK
Profil
Odstraň tečky z toho dotazu a myslím, že to půjde. Elegantnější řešení je platnost >= NOW().
Alphard
Profil
TomášK:
Elegantnější řešení je platnost >= NOW().
Dosazení data z PHP umožní cachování dotazu na úrovni MySQL.
Kcko
Profil
Alphard
Muzes k tomu napsat vice? Ja o tom nic nevim, zajimalo by mne to.
Alphard
Profil
Kcko:
Zrovna o tom nemůžu najít žádný článek, takže musí stačit mé stručné (snad né chybné) vysvětlení. MySQL cachuje jednotlivé dotazy (cache se maže při změně tabulky, které se týká). Problém je v tom, že se cache nepoužije, pokud dotaz obsahuje funkce vkládající aktuální čas, jako je třeba now().

Více si o tom přečti tady A Practical Look at the MySQL Query Cache, zdůrazňuji jednu větu (je na konci):
Many functions, such as CURRENT_DATE, NOW, RAND and others, negate the use of the cache.
Kajman_
Profil *
http://dev.mysql.com/doc/refman/5.0/en/query-cache-operation.html
Kcko
Profil
Diky oboum , mrknu na to
Smoother
Profil
TomášK
jsem trouba, díky....

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: