Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    query select che esclude valori uguali

    Salve a tutti,
    ho un problema con una select, in sostanza vorrei che i valori comparissero al "netto" di quelli già inseriti. Ho due tabelle, 'appuntamenti' e 'appuntamentiora', in quest'ulima ho un elenco di orari e giorno della settimana. Nella prima (appuntamenti) tutte le info.
    La struttura è la seguente: Tab 'appuntamenti' con id_appuntamenti_ora che richiama la riga di appuntamentiora corrispondente. Ora, io ho provato con

    $result = mysql_query("SELECT *
    FROM appuntamentiora
    WHERE giornosett='$giornosett'
    ORDER BY orarioA
    ");
    while($row = mysql_fetch_array($result))
    {
    $Idapp = $row['Id'];
    $orario = $row['orarioA'];
    $tipoVisitaA = $row['tipoVisitaA'];
    echo "<option value=\"$Idapp\">$orario - $tipoVisitaA</option>";
    }

    e mi da tutti gli orari per quel giorno della settimana.
    Ora vorrei escludere tutti gli appunamenti già dati in quel giorno.
    con questa seleziono quelli assegnati, in pratica vorrei il contrario

    $str_data = strtotime($_GET['riga_data']); //data dell'agenda


    $result = mysql_query("SELECT *
    FROM appuntamentiora
    RIGHT JOIN appuntamenti ON appuntamenti.id_appuntamento_ora=appuntamentiora.I d
    WHERE appuntamenti.str_data = '$str_data'
    AND giornosett='$giornosett'
    ORDER BY orarioA
    ");

    while($row = mysql_fetch_array($result))
    {
    $Idapp = $row['Id'];
    $orario = $row['orarioA'];
    $tipoVisitaA = $row['tipoVisitaA'];
    echo "<option value=\"$Idapp\">$orario - $tipoVisitaA</option>";
    }


    Se c'è un'anima pia...

  2. #2
    Innanzi tutto chiedo venia per non aver postato il php a dovere.
    Per risolvere il mio problema ho capito (?) che basterebbe escludere i valori della prima select dalla seconda. Ho provato così ma mi esclude solo l'ultimo:
    codice:
    
    
    Codice PHP:
    //prima select $str_data strtotime($_GET['riga_data']);         $result2 mysql_query("SELECT*                     FROM appuntamentiora                     JOIN appuntamenti ON appuntamenti.id_appuntamento_ora = appuntamentiora.Id                     WHERE appuntamenti.str_data = $str_data                     AND giornosett = '$giornosett'                     ");              while($row mysql_fetch_array($result2))          {         $Idapp2        $row['Id'];         } //seconda select $result mysql_query("SELECT*                     FROM appuntamentiora                                          WHERE Id != $Idapp2                                          AND giornosett = '$giornosett'                     ORDER BY orarioA                     ");              while($row mysql_fetch_array($result))          {         $Idapp        $row['Id'];         $orario        $row['orarioA'];         $tipoVisitaA    $row['tipoVisitaA'];                          echo "<option value=\"$Idapp\">$Idapp - $orario - $tipoVisitaA</option>";         } 
    Insomma c'è un modo per far si che escluda tutti i valori ( $Idapp2 )estratti con la prima select?

  3. #3
    devi usare NOT IN...

    o fai diventare $Idapp2 un array:
    Codice PHP:

          $Idapp2
    =array();
           
    $j=0;
          while(
    $row mysql_fetch_array($result2)) 
            {
              
    $Idapp2[$j]        = $row['Id'];
              
    $j++;
            } 
    e poi gli passi l'array nel NOT IN
    Codice PHP:
    $query ="SELECT * FROM appuntamentiora
    WHERE Id NOT IN ("
    ;
    foreach (
    $Idapp2 as $value)
      {
       
    $query .="$value,";
      }
    substr_replace($query ,"",-1); //rimuovi l'ultima virgola
    $query .=") AND giornosett = '$giornosett' ORDER BY orarioA";

    $result mysql_query($query); 


    OPPURE fai tutto da SQL più o meno così:
    Codice PHP:
    $query ="SELECT * FROM appuntamentiora
    WHERE Id NOT IN (
    SELECT Id FROM appuntamentiora JOIN appuntamenti ON appuntamenti.id_appuntamento_ora = appuntamentiora.Id
    WHERE appuntamenti.str_data = 
    $str_data
    AND giornosett = '
    $giornosett'
    )                   
    AND giornosett = '
    $giornosett'
    ORDER BY orarioA"
    ;

    $result mysql_query($query); 

  4. #4
    VA!!!
    L'ho modificata perchè c'era qualche problema nei parametri, colpa mia.
    posto il codice che funziona:

    Codice PHP:
    $str_data strtotime($_GET['riga_data']);                               $query ="SELECT * FROM appuntamentiora                 WHERE Id NOT IN (SELECT id_appuntamento_ora FROM appuntamenti WHERE appuntamenti.str_data = $str_data)                   AND giornosett = '$giornosett'                 ORDER BY orarioA";              $result mysql_query($query);              while($row mysql_fetch_array($result))          {         $Idapp        $row['Id'];         $orario        $row['orarioA'];         $tipoVisitaA    $row['tipoVisitaA'];                              echo "<option value=\"$Idapp\">$Idapp - $orario - $tipoVisitaA</option>";         } 

    Grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.