Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19

Discussione: Query tra 2 date

  1. #11
    ok ho fatto la funzione che mi converte 13/05/2009 in 2009-05-13 ma pesca le offerte di settembre... per quale motivo?
    la query e' questa

    Codice PHP:
    $sql1=mysql_query("select a.id, a.albergo, a.titolo, a.valida_da, a.valida_fino, a.prezzo, a.prezzo_come, a.scadenza, a.pacchetto, b.link, b.foto, b.comune, b.stelle from offerte a, albergo b where '$data_arrivo' between a.valida_da AND a.valida_fino and '$data_partenza' between a.valida_da and a.valida_fino and a.albergo = b.hotel"); 
    Mai dire Mai

  2. #12
    meglio se metti la struttura della tabella "offerte" e quale e' la relazione con la tabella "albergo"

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #13
    Struttura albergo:
    questa tabella contiene tutti gli hotel del mio sito


    CREATE TABLE `albergo` (
    `id` smallint(10) NOT NULL auto_increment,
    `hotel` varchar(100) NOT NULL default '',
    `metatag` text NOT NULL,
    `stelle` smallint(10) NOT NULL default '0',
    `comune` varchar(100) NOT NULL default '',
    `foto` text NOT NULL,
    `descrizione` text NOT NULL,
    `sotto` varchar(250) NOT NULL default '',
    `footer` text NOT NULL,
    `cartella` varchar(130) NOT NULL default '',
    `indirizzo` varchar(210) NOT NULL default '',
    `foto1` text NOT NULL,
    `foto2` text NOT NULL,
    `foto3` text NOT NULL,
    `foto4` text NOT NULL,
    `foto5` text NOT NULL,
    `foto6` text NOT NULL,
    `foto7` text NOT NULL,
    `foto8` text NOT NULL,
    `link` varchar(150) NOT NULL default '',
    `link_contatti` varchar(130) NOT NULL default '',
    `link_tariffe` varchar(130) NOT NULL default '',
    `attivo` int(11) NOT NULL default '0',
    `ordine` int(11) NOT NULL default '0',
    `commissione` int(1) NOT NULL default '0',
    `caparra` varchar(5) NOT NULL default '0',
    `nascosto` int(1) NOT NULL default '0',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=91 ;


    struttura offerte
    questa contiene tutte le offerte, nel campo albergo ci metto il nome dell'hotel e questa e' la relazione tra le 2 tabelle

    CREATE TABLE `offerte` (
    `id` int(11) NOT NULL auto_increment,
    `titolo` varchar(255) NOT NULL default '',
    `valida_da` date NOT NULL default '0000-00-00',
    `valida_fino` date NOT NULL default '0000-00-00',
    `prezzo_sp` float NOT NULL default '0',
    `prezzo_bb` float NOT NULL default '0',
    `sotto` varchar(200) NOT NULL default '',
    `prezzo` float NOT NULL default '0',
    `prezzo_fb` float NOT NULL default '0',
    `prezzo_come` smallint(2) NOT NULL default '0',
    `tipo_camera` varchar(50) NOT NULL default '',
    `notti` smallint(2) NOT NULL default '0',
    `supplementi_riduzioni` text NOT NULL,
    `incluso_nel_prezzo` text NOT NULL,
    `trattamento` varchar(255) NOT NULL default '',
    `descrizione_offerta` text NOT NULL,
    `scadenza` varchar(250) NOT NULL default '',
    `albergo` varchar(250) NOT NULL default '',
    `pacchetto` int(1) NOT NULL default '0',
    PRIMARY KEY (`id`),
    KEY `index_off_albergo` (`albergo`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1463 ;

    in questa tabella ho anche i campi prezzo_fb, prezzo_bb ecc, ma per ora in questo motore non voglio farli comparire, li metto appena riesco a sistemare le date...
    Mai dire Mai

  4. #14
    prova a mettere direttamente la data al posto della variabile, oppure stampa la query per vedere come viene risolta.

    codice:
    $query = "select a.id, a.albergo, a.titolo, a.valida_da, 
              a.valida_fino, a.prezzo, a.prezzo_come, a.scadenza, a.pacchetto,
              b.link, b.foto, b.comune, b.stelle 
              from offerte a, albergo b 
              where '$data_arrivo' between a.valida_da AND a.valida_fino 
              and 
              '$data_partenza' between a.valida_da and a.valida_fino 
              and 
              a.albergo = b.hotel";
               
    echo $query;
               
    $sql1 = mysql_query($query) or die (mysql_error());
    per il prezzo non usare campi float ma decimal

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #15
    sembra funzionare... anche con l'altro codice... pero' ora devo affinarla perche' devo far uscire i vari prezzi.
    Cosa cambia se modifico ora i prezzi in decimal da float?
    Perdo tutti i dati dal db? e a cosa serve farlo?
    Mai dire Mai

  6. #16
    Originariamente inviato da trippacchiello
    sembra funzionare... anche con l'altro codice... pero' ora devo affinarla perche' devo far uscire i vari prezzi.
    Cosa cambia se modifico ora i prezzi in decimal da float?
    Perdo tutti i dati dal db? e a cosa serve farlo?
    float da valori dipendenti dal OS. DECIMAL(6,2) ti da 6 cifre totali di cui due decimali e non e' dipendente dal OS.

    fai una copia della tabella e prova a modificare su quella.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #17
    Originariamente inviato da piero.mac
    float da valori dipendenti dal OS. DECIMAL(6,2) ti da 6 cifre totali di cui due decimali e non e' dipendente dal OS.

    fai una copia della tabella e prova a modificare su quella.
    ok va bene ora ci provo...
    ultima domanda: a sto punto se voglio ordinare i risultati per prezzo come posso fare visto che ho 4 tipologie di prezzo?

    ho $prezzo_sp per le offerte in solo pernottamento
    $prezzo_bb per le offerte in camera e colazione
    $prezzo per le offerte in mezza pensione
    $prezzo_fb per le offerte in pensione completa

    se metto order by prezzo mi ordina tutto in base alla mezza pensione ma molti hotel quel trattamento non lo fanno proprio e quindi non me lo ordina...
    Mai dire Mai

  8. #18
    beh! devi sapere quale prezzo utilizzare e poi lo metti nell'order by. Potresti anche scegliere il range di prezzo da mettere ovviamente nel where con il solito between.

    Ho visto il form. Credo non ti convenga lasciare tutte le tipologie con la spunta. Meglio se fai un default e lasci solo quello e con type = radio impedire che possa esserci il check su scelte contemporanee incongruenti.... es: 2 Stelle 3 Stelle 4 Stelle 5 Stelle .... deve essercene una sola segnata. Aggiungerei anche un radio con un bel "qualunque Stella"

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #19
    ok ho fatto come dici tu ma per il prezzo non ho capito come potrei farlo
    per ora ho fatto order by prezzo asc, prezzo_fb asc.

    Poi ho il problema che devo contare le notti nel modulo e cioe' $data_arrivo e $data_partenza perche' molte offerte, per esempio quelle di pasqua, hanno soggiorni di minimo 3 notti e invece ora come ho fatto mi escono anche quelle di 1 e 2 notti...
    quindi vorrei poter contare le notti e fare una query ad hocper non fare uscire le offerte che non c'azzeccano niente con quel periodo...
    Mai dire Mai

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.