• User Attivo

    Ciao,
    riapro questo post perchè ho una piccolissima variante da fare sulla soluzione dell'altra volta.

    Vorrei non più solo il più visto, ma "i più visti", esempio i 5 più visti di questa settimana

    Ho subito pensato bastasse cambiare il limit a questa query e fare un while..
    SELECT * FROM tabella GROUP BY id HAVING count(id) = (SELECT count(id) AS n_trovati FROM tabella GROUP BY id ORDER BY n_trovati DESC LIMIT 1)

    Ma a mysql non piace... dice...
    #1242 - Subquery returns more than 1 row

    Come ne esco??
    Si può fare con questo tipo di query?

    Ciao
    Grazie


  • ModSenior

    Togli il group by dalla subquery e funziona, anche perchè non credo proprio che ti serva visto che usa l'id.


  • User Attivo

    Non mostra piu nulla senza group
    $query_piu_visti = "SELECT * FROM ".$prefix."piu_visti_sett GROUP BY id_news HAVING count(id_news) = (SELECT count(id_news) AS n_trovati FROM ".$prefix."piu_visti_sett ORDER BY n_trovati DESC LIMIT 5)";
    //echo $query_piu_visti;
    $piu_visti_query = mysql_query($query_piu_visti, $db);
    while($row_piu_visti = mysql_fetch_array($piu_visti_query)){


  • ModSenior

    Ma a cosa ti serve la subquery in questo caso? Perchè non ordini usando il count e applichi un limit?


  • User Attivo

    Fondamentalmente perche ora non so come toglierla...

    Cioè dopo having uguale cosa metto?

    SELECT * FROM ".$prefix."piu_visti_sett GROUP BY id_news HAVING count(id_news) =..........


  • ModSenior

    Puoi postare la struttura di piu_visti_sett?


  • User Attivo

    Fatta cosi semplice semplice
    CREATE TABLE IF NOT EXISTS streaming_up_tv_piu_visti_sett (
    id_news int(11) NOT NULL,
    titolo varchar(255) NOT NULL,
    img varchar(255) NOT NULL,
    data_ins varchar(255) NOT NULL,
    KEY id_news (id_news)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    Poi sulla pagina di output del singolo post inserisco e cancello i più vecchi di una settimana


  • User Attivo

    E' davvero cosi un casino???

    Di solito rispondi molto veloce...


  • User Attivo

    Ho provato cosi
    SELECT count(id_news) AS n_trovati, id_news, titolo, img FROM ".$prefix."piu_visti_sett GROUP BY id_news ORDER BY n_trovati DESC LIMIT 5

    Cioè togliendo la parte a sinistra di having ed effettivamente ne mostra 5 e non sembra lamentarsi più di tanto...

    Ho però qualche dubbio sull'ordinamento, cioè sul fatto che siano effettivamente i 5 più visitati... Secondo voi??? Saranno giusti con la query scritta cosi?


  • User Attivo

    Ciao,
    vorrei riaprire questa discussione perche ho un altra query un pò diversa da quelle che si usano di solito. E mi sembra cosa carina dare in un solo posto diverse risposte a problemi particolari...

    Ho un db con questa struttura
    id_campagna
    clicks_rimanenti
    clicks_consumati

    Vorrei estrarre dal database l'id di una campagna che non ha ancora esaurito i clicks.
    Si potrebbe fare in phpcon diverse query, ma sono sicuro (anche se non l'ho mai usato) che esiste un modo per farlo usando la clausola where di mysql.

    Qualcosa tipo
    SELECT * FROM campagne WHERE clicks < clicks_consumati

    dove click e clicks_consumati sono 2 campi mysql e non variabili php ( forse funziona già cosi come l'ho scritta)

    Secondo voi funziona? Altrimenti come si scrive?