• User

    Problemi mysql con condizione

    Ciao a tutti, spero che questa mia richiesta di aiuto venga sentita, perche ormai sono giorni e giorni che ci sbatto senza arrivare al dunque.

    Probabilmente ci deve essere qualcosa di piccolo, che io non riesco a vedere, quindi vi lascio il codice, sperando in una vostra risposta.

    Premessa:
    Stò elaborando un sistema per individuare il numero di post inseriti nel mio portale di annunci, al fine di individuare gli inserzionisti che durante un certo periodo superano quel numero di inserzioni consentito settimanalmente.
    Questa querry, a il compito di richiamare quie valori per mezzo di alcune condizioni, ovvero, la data di pubblicazione intercorsa in un lasso temporale di 7 giorni, e il numero di inserzioni sulla base della email.

    La prima parte relativa alla data da interrogare sembra funzionare correttamente. Inserendo la seconda condizione, ovvero se le email di pubblicazione superano un certo limite, si BLOCCA, mentre per la terza Condizione TUTTO REGOLARE.

    PREMETTO CHE NON CI SONO ERRORI NELLA SUA ESECUZIONE

    $improve_date = (time()-$improve_ads_multipost);

    $sql = "SELECT adid, adtitle, COUNT(email) AS tot, email, code, cityid FROM $t_ads
    WHERE UNIX_TIMESTAMP(createdon) <= '".$improve_date."'
    AND tot <= '".$numero_email."'
    AND toplist = '0'
    GROUP BY email";

    $result = mysql_query($sql);

    if ( @mysql_num_rows($result) )
    {

    while ( $row = mysql_fetch_array($result) )
    {

    $subj = $lang['IMPROVEMULTI_SUBJ'] ;
    $msg = $lang['IMPROVEMULTI_MSG_START'] ;
    $msg = $lang['IMPROVEMULTI_MSG_START'] . "" . $row['tot'] ."n". $lang['IMPROVEMULTI_MSG_INS'] ."n". $lang['IMPROVEMULTI_MSG_END'] ;

    $to = $row["email"];
    $from = $site_email;

    mail($to, $subj, $msg, "From: $from\r\n");

    echo $row["adid"].' - email sent to '.$row["email"].''.$row["tot"].'<br>'; // output

    }

    }

    Ringrazio anticipatamente coloro che potranno aiutarmi.


  • ModSenior

    Ciao oraposso,

    prova cosi:

    
    SELECT adid, adtitle, COUNT(email) AS tot, email, code, cityid FROM $t_ads 
    WHERE UNIX_TIMESTAMP(createdon) <= '".$improve_date."' 
    AND toplist = '0' 
    GROUP BY email
    HAVING tot <= '".$numero_email."'
    
    

  • User

    Nonostante non dia nessun errore, non funziona. Ti ringrazio per la tua risposta, comunque credo che ci siamo avvicinati.


  • ModSenior

    Sarebbe meglio mettere:
    [php] mysql_query($sql); or die(mysql_error());[/php]
    Perchè la sintassi della query precedente avrebbe dovuto generarti errore.


  • User

    La clausola HAVING svolge una funzione di selezione delle righe, esattamente come la WHERE. La differenza è che la WHERE viene applicata sulle righe delle tabelle originali, mentre la HAVING viene applicata sulle righe della tabella risultato dopo i raggruppamenti richiesti dalle GROUP BY. In pratica, è utile per effettuare test sui valori restituiti dalle funzioni di colonna.

    IO ho bisogni di applicare la condizione direttamente sulla tabella.


  • User

    @Thedarkita said:

    [..]

    La funzione e gia inclusa.
    Ottengo il risultato, dall'interrogazione della tabella, se escludo AND tot <= '".$improve_email."' (Che in pratica dovrebbe controllare il numero di email presenti nei record)


  • User

    @oraposso said:

    La funzione e gia inclusa.
    Ottengo il risultato, dall'interrogazione della tabella, se escludo AND tot <= '".$improve_email."' (Che in pratica dovrebbe controllare il numero di email presenti nei record)

    Non capisco, perche mi accetti la seconda condizione (AND toplist = '0' ), e non la prima. Mi sto rovinado le giornate. :smile5:


  • ModSenior

    Vedi che la sintassi corretta è con HAVING e non con WHERE per quello che stai facendo tu.
    Se senza quello funziona allora con la query che ii ho dato io deve funzionare per forza.
    Comunque se non metti il mysql_error come ti ho detto. e mi riporti l'errore è impossibile dirti qualsiasi cosa oltre ciò che ti ho già detto.


  • User

    @Thedarkita said:

    [...]

    Ok, includerò anche questo controllo sul database immediatamente.


  • User

    La connessione a database, avviene corretamente, il tutto funzione, in particolare con la prima condizione WHERE, mi restituisce esattamente i risultati che voglio ottenere dalla prima interrogazione, la seconda condizione AND tot <= '".$below_multipost."' , che dovrebbe estrapolare il numero di email presenti in un certo lasso temporale, non funziona, ma non perche non si connette al database, ma solo perche la condizione non e in grado di estrapolare i dati (Non ho idea a cosa sia dovuto), ho inserito la condizione HAVING, ma ottengo lo stesso buio che ottenevo prima.

    Forse quello che sto cercando di fare, va visto sotto una logica diversa, non so, ma sicuramente quella condizione, non funziona per qualche motivo.


  • ModSenior

    Ma queste query come le provi? Perchè se una query non funziona devi farti dare l'errore, altrimenti dobbiamo tirare ad indovinare.
    Fai un echo della query cosi:
    [php]
    echo "SELECT adid, adtitle, COUNT(email) AS tot, email, code, cityid FROM $t_ads
    WHERE UNIX_TIMESTAMP(createdon) <= '".$improve_date."'
    AND toplist = '0'
    GROUP BY email
    HAVING tot <= '".$numero_email."'";
    [/php]
    Prendi la query mostrata sullo schermo e la fai eseguire da phpmyadmin, e vedi se restituisce un errore o un insieme vuoto.


  • User

    @Thedarkita said:

    [...]

    OK.

    Se vuoi posso girati la pagine con il codice, e anche la tabella in questione, magari troviamo una soluzione a questo dilemma.

    Intanto grazie, ci sentiamo pomeriggio, fammi sapere se vuoi i file


  • User

    $sql = "SELECT adid, adtitle, COUNT(email) AS tot, email, code, cityid FROM $t_ads
    WHERE UNIX_TIMESTAMP(createdon) <= '".$improve_date."'
    AND toplist = '0'
    GROUP BY email
    HAVING tot <= '".$below_multipost."'";

    Ho provato nuovamente, ma sembra, non escludere quei risultati non richiesti, nel senso che mi da sempre dei risultati, nonostante imposti la variabile $below_multipost con valori maggiori e minori.


  • User

    Ora funziona tutto correttamente, il problema stava nel < >, grazie per avermi risolto il problema.

    A buon rendere