Select Top voturi de azi

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
evident
Mesaje:168

Select Top voturi de azi

Am o baza de date voturi cu urmatoarele coloane:
id, user, item, data

userul este userul care a votat si item este itemul pe care la votat.
data este data la care s-a votat

Vreau sa fac un select cu cel mai votat item de astazi.

Multumesc mult.

MarPlo Mesaje:4343
Daca coloana "data" e de tip DATE sau DATETIME, incearca acest Select:

Cod: Selectaţi tot

SELECT item, COUNT(item) AS nrvoturi FROM tabel WHERE DATE(data) = DATE(NOW()) GROUP BY item ORDER BY nrvoturi DESC
Sau:

Cod: Selectaţi tot

SELECT item, COUNT(item) AS nrvoturi FROM tabel WHERE DATE(data) >= CURDATE() GROUP BY item ORDER BY nrvoturi DESC

evident Mesaje:168
Nu imi mere asa cum trebuie acest script.
De exemplu eu am in tabelul voturi asa:

Cod: Selectaţi tot

id    user    item    data
1    user1    poza    2014-07-12
2    user2    poza2   2014-07-12
3    user3    poza    2014-07-12
4    user4    poza    2014-07-12
5    user5    poza3   2014-07-12
6    user6    poza2    2014-07-12
Vreau sa afisez ce-a mai votata poza.
In cazul meu sa afiseze "poza".
Multumesc

MarPlo Mesaje:4343
Codul functioneaza, doar ca daca vrei sa returneze un singur rand, cu cea mai votata poza, trebuie adaugat: " LIMIT 1". Pentru cele mai votate 2 poze, se pune " LIMIT 2".

Cod: Selectaţi tot

SELECT item, COUNT(item) AS nrvoturi FROM tabel WHERE DATE(data) = DATE(NOW()) GROUP BY item ORDER BY nrvoturi DESC LIMIT 1

evident Mesaje:168
Merge bine, am faut asa:

Cod: Selectaţi tot

<?php
$sql_voturi = "SELECT item, COUNT(item) AS nrvoturi FROM voturi WHERE DATE(data) = DATE(NOW()) GROUP BY item ORDER BY nrvoturi DESC LIMIT 1";
    $query = mysqli_query($db_conx, $sql_voturi);
    while($row = mysqli_fetch_array($query)) {
   $nr= $row['nrvoturi'];
}
echo $nr;
?>
Mai am o intrebare aici daca se poate ca atunci cand gaseste 2 iteme care au acelasi nr de voruri sa afiseze doar unul.
Scriptul afiseaza doar unul dar cand dau refresh la pagina il afiseaza pe celalalt item care are acelasi nr de voturi.

Multumesc mult

MarPlo Mesaje:4343
Ca sa returneze mereu acelasi item cu numar egal de voturi, adauga si "item" la ORDER BY :

Cod: Selectaţi tot

SELECT item, COUNT(item) AS nrvoturi FROM tabel WHERE DATE(data) = DATE(NOW()) GROUP BY item ORDER BY nrvoturi DESC, item DESC LIMIT 1

Subiecte similare