• User Newbie

    Query su due tabelle

    Buonasera a tutti,

    due tabelle, un chiama utente e l'altra appuntamenti

    [HTML]
    Tabella utente costituita da:
    id_utente cognome
    1 pino
    2 pippo
    [/HTML]
    L'orario degli appuntamenti vanno dalle ore 09:00 alle 17:00 per entrambi gli utenti

    Esempio N°1:
    Tabella appuntamenti costituita da:
    [HTML]
    Id giorno_appuntamento ora_inizio ora_fine id_utente
    1 2020-04-20 09:00 10:30 1
    2 2020-04-20 09:00 11:00 2
    [/HTML]
    Gli orari fino alle 17 sono disponibili per entrambi gli utenti e la query mi deve restituire che c'è ancora posto.

    Esempio N°2
    Tabella appuntamenti costituita da:
    [HTML]
    Id giorno_appuntamento ora_inizio ora_fine id_utente
    1 2020-04-20 09:00 17:00 1
    2 2020-04-20 09:00 11:00 2
    [/HTML]
    In questo caso l'utente 1 è pieno ma l'utente 2 ha ancora disponibilità fino alle 17 quindi anche quì la query mi deve restituire che c'è ancora posto.

    Esempio N°3
    Tabella appuntamenti costituita da:
    [HTML]
    Id giorno_appuntamento ora_inizio ora_fine id_utente
    1 2020-04-20 09:00 17:00 1
    2 2020-04-20 09:00 17:00 2
    [/HTML]
    In questo caso tutte e due gli utenti non hanno più disponibilità quindi la query mi deve restituire che non c'è ancora posto.

    Io ho fatto in questo modo:

    [PHP]$query_a = "SELECT * FROM utenti";
    $Recordset_a = mysql_query($query_a, $aic_grosseto) or die(mysql_error());
    while($row_a=mysql_fetch_row($Recordset_a))
    {
    $id_utenti=$row_a[0];
    $query_Recordset3 = "SELECT * FROM appuntamento WHERE giorno_app='$day_cont' and ora_inizio<='$ora_cont' and ora_fine>='$ora_cont' and id_utente='$id_utenti'";
    $Recordset3 = mysql_query($query_Recordset3, $aic_grosseto) or die(mysql_error());
    $row_Recordset3 = mysql_fetch_assoc($Recordset3);
    $totalRows_Recordset3 = mysql_num_rows($Recordset3);
    echo $totalRows_Recordset3;
    }}[/PHP]

    Però così non va bene.


  • User Newbie

    Buongiorno a tutti,
    ho provato in questo modo:

    [PHP]$query_Recordset3 = "SELECT * FROM utenti WHERE EXISTS (SELECT * FROM appuntamento WHERE appuntamento.giorno_app='$day_cont' and appuntamento.ora_inizio<='$ora_cont' and appuntamento.ora_fine>='$ora_cont' and appuntamento.id_utente=utenti.id_utente)";
    $Recordset3 = mysql_query($query_Recordset3, $aic_grosseto) or die(mysql_error());
    $row_Recordset3 = mysql_fetch_assoc($Recordset3);
    $totalRows_Recordset3 = mysql_num_rows($Recordset3);[/PHP]

    Ma purtroppo non funziona perchè mi restituisce che non c'è posto anche se solo un utente è pieno ovvero ha gli appuntamenti dalle 09:00 alle 17:00, come nell'esempio N°2, quando in realtà l'altro utente ha ancora posto.

    Cosa ne pensate?
    :ciauz:


  • Moderatore

    il controllo che dovrai fare è che se l'orario inizio del nuovo appuntamento è compresa tra inizio e fine sul db e la data fine è compresa tra inizio e fine e maggiore di 17 allora è full l'orario che stai scegliendo. una cosa del genere. così tu stai usando solo l'ora di start e mai l'ora di end.