Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    Aiuto per una query

    Ciao ragazzi,
    ho fatto questa query in mysql che selezionando un corso con la sua data , ora inzio e ora fine mi deve escludere tutti gli altri corsi che si accavallano o che comunque sono in contemporanea,
    La query è questa mi funziona, ma la vedo un po troppo articolata.. forse si potrebbe riscrivere in un modo più semplice!!!!!!!:
    voi che pensate?

    SELECT codice_corso FROM scheda_corsi
    WHERE (data_inizio='2010-10-20 00:00:00'
    and codice_corso <> 'CFR')
    and ora_inizio BETWEEN 1115 and 1214
    or ora_fine BETWEEN 1115 and 1214


    I campi della tabella scheda_corsi sono i seguenti:
    codice_corso
    descrizione_corso
    data_inizio,
    ora_inizio,
    data_fine,
    ora_fine

    e qui i vari record, della tabella.

    "ZZZ";"CORSO ESEMPIO 1";"2010-10-20 00:00:00";"1000";"2010-10-20 00:00:00";"1200";
    "CCC";"CORSO ESEMPIO 2";"2010-10-20 00:00:00";"1115";"2010-10-20 00:00:00";"1315";
    "SDS";"CORSO ESEMPIO 3";"2010-10-20 00:00:00";"1215";"2010-10-20 00:00:00";"1315";
    "DDD";"CORSO ESEMPIO 3";"2010-10-20 00:00:00";"1215";"2010-10-20 00:00:00";"1315";
    "RUO";"CORSO ESEMPIO 4";"2010-10-20 00:00:00";"1215";"2010-10-20 00:00:00";"1315";
    "ABX";"CORSO ESEMPIO 5";"2010-10-20 00:00:00";"1115";"2010-10-20 00:00:00";"1215";
    "4CO";"CORSO ESEMPIO 6";"2010-10-20 00:00:00";"1115";"2010-10-20 00:00:00";"1215";
    "CFD";"CORSO ESEMPIO 7";"2010-10-20 00:00:00";"1115";"2010-10-20 00:00:00";"1215";




    come potrei ottimizzarla secondo voi.... secondo me la sto facendo molto più diffile di quello che è.... mi sto perdendo in un bicchiere d'acqua insomma...

    mi date un suggerimento
    grz
    Giuseppe

  2. #2
    non mi è chiaro quello che devi fare....

    devi solo escludere quelli che si accavallano con la tua query
    oppure il discorso è piu generale e dato un orario o un codice corso...devi escludere gli altri ?...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    devo fare una query che mi tira fuori tutti i corsi che si accavallano alla mia data ed ora inizio e ora fine.
    la query che sto provando dopo averal testata per bene, mi sono accorto che non funge:

    Codice PHP:
    SELECT codice_corso FROM scheda_corsi
    WHERE
    (data_inizio='2010-10-20 00:00:00' and codice_corso <> 'C01')
    and (
    ora_inizio BETWEEN 1115 and 1215)
    or 
    ora_fine BETWEEN 1115 and 1215 order by codice_corso 



    "C01";"Corso - 1";"Sala 2";"2010-10-20 00:00:00";"1115";"2010-10-20 00:00:00";"1215";
    "C02";"Corso - 2";"Sala 4";"2010-10-20 00:00:00";"1115";"2010-10-20 00:00:00";"1215"
    "C03";"Corso - 3";"Sala 5";"2010-10-20 00:00:00";"1115";"2010-10-20 00:00:00";"1215";
    "C04";"Corso - 4";"Sala 6";"2010-10-20 00:00:00";"1115";"2010-10-20 00:00:00";"1315";
    "C05";"Corso - 5";"Sala 3";"2010-10-20 00:00:00";"1215";"2010-10-20 00:00:00";"1315";

    Faccio un esempio:
    se seleziono codice_corso C01 dalla tabella mi deve dare C02,C03,C04
    invece con la query di sopra mi esco fuori tutti.
    Funziona solo se faccio:


    Codice PHP:
    SELECT codice_corso FROM scheda_corsi
    WHERE
    (data_inizio='2010-10-20 00:00:00' and codice_corso <> 'C01')
    and (
    ora_inizio BETWEEN 1115 and 1214)
    or 
    ora_fine BETWEEN 1115 and 1214 order by codice_corso 

    cio9è vado a mettere un minuto prima all'ora fine.
    ma cos' mi complico.. tutta la vita visto che poi lo dovrei fare da codice...

    quindi deduco che la query che ho scritto è sbagliata... !!!
    e chiedevo un vostro aiuto!

    ciao
    Giuseppe

  4. #4
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    La query è ottimizzata, io ottimizzerei il db. I campi che contengono la data di inizio e di fine sono DATETIME inutilmente perchè salvi solo la data quindi potresti metterli DATE e i campi ora inizio e ora fine sembrano essere un CHAR o un INT potresti metterli TIME.
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    grazie andy.. seguiro i tutoi consigli..
    ma sta di fatto che la query che faccio no mi da quello che voglio purtroppo...

  6. #6
    Utente di HTML.it L'avatar di Andy_87
    Registrato dal
    Jun 2010
    Messaggi
    323
    Perdonami ma non è molto chiaro quello che vuoi ottenere però se sono riuscito a capire qualcosa, forse usando < e > e <= e >= riesci a risolvere il tuo problema. Cioè mettere l'ora di fine giusta, non un minuto indietro. Così:
    Codice PHP:
    SELECT codice_corso
    FROM scheda_corsi
    WHERE 
    (data_inizio='2010-10-20 00:00:00' AND codice_corso <> 'C01') AND (ora_inizio >= 1115 AND ora_inizio 1215) OR (ora_fine >= 1115 AND ora_fine 1215)
    ORDER BY codice_corso 
    Scrivere BETWEEN è come scrivere <= e >=. In pratica la between ti prende anche gli estremi e nel tuo caso prendeva anche quelli che finivano alle 1215, cosa che tu non vuoi.

    Fammi sapere se ho capito cosa vuoi fare e se così risolvi
    "Se non riuscirò a piegare gli dei del cielo, smuoverò le potenze dell'inferno"
    S. Freud

  7. #7
    Ciao,

    per questo tipo di domande c'è la sezione Database, sposto li.

    Più attenzione pls
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.