Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Categorie
    3. Coding e Sistemistica
    4. Coding
    5. Problemi mysql con condizione
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • O
      oraposso User • 15 set 2009, 22:16 ultima modifica di

      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.

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
        Caricamento altri post
        Rispondi
        • Topic risposta
        Effettua l'accesso per rispondere
        • Da Vecchi a Nuovi
        • Da Nuovi a Vecchi
        • Più Voti
         

      • T
        thedarkita ModSenior • 16 set 2009, 08:29 ultima modifica di

        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."'
        
        
        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • O
          oraposso User • 16 set 2009, 08:58 ultima modifica di

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

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • T
            thedarkita ModSenior • 16 set 2009, 09:01 ultima modifica di

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

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • O
              oraposso User • 16 set 2009, 09:01 ultima modifica di

              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.

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • O
                oraposso User • 16 set 2009, 09:05 ultima modifica di

                @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)

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • O
                  oraposso User • 16 set 2009, 09:07 ultima modifica di

                  @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:

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • T
                    thedarkita ModSenior • 16 set 2009, 09:08 ultima modifica di

                    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.

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • O
                      oraposso User • 16 set 2009, 09:10 ultima modifica di

                      @Thedarkita said:

                      [...]

                      Ok, includerò anche questo controllo sul database immediatamente.

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • O
                        oraposso User • 16 set 2009, 09:22 ultima modifica di

                        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.

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • T
                          thedarkita ModSenior • 16 set 2009, 09:27 ultima modifica di

                          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.

                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          • O
                            oraposso User • 16 set 2009, 09:42 ultima modifica di

                            @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

                            0 Miglior Risposta Ringrazia Cita Rispondi

                              1 Risposta Ultima Risposta
                            • O
                              oraposso User • 16 set 2009, 09:54 ultima modifica di

                              $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.

                              0 Miglior Risposta Ringrazia Cita Rispondi

                                1 Risposta Ultima Risposta
                              • O
                                oraposso User • 16 set 2009, 11:13 ultima modifica di

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

                                A buon rendere

                                0 Miglior Risposta Ringrazia Cita Rispondi

                                  1 Risposta Ultima Risposta
                                Caricamento altri post
                                Rispondi
                                • Topic risposta
                                Effettua l'accesso per rispondere
                                • Da Vecchi a Nuovi
                                • Da Nuovi a Vecchi
                                • Più Voti