Originariamente inviato da jeck
Scusa se rispondo ora, ma sono stato fuori in questi giorni.
La struttura della prima tabella è questa
codice:
CREATE TABLE `my_tab` (
  `eid` mediumint(8) unsigned NOT NULL auto_increment,
  `nome` varchar(255) NOT NULL,
  `mail_e` varchar(255) NOT NULL,
  `tipo` varchar(255) NOT NULL,
  `icona` varchar(50) NOT NULL,
  `data_dal` date default NULL,
  `data_al` date default NULL,
  `ev_dal` date default NULL,
  `ev_al` date default NULL,
  `coming` longtext NOT NULL,
  `home` varchar(255) NOT NULL,
  `enable` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY  (`eid`),
  FULLTEXT KEY `nome_2` (`nome`,`home`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
e la struttura della seconda tabella è questa

codice:
CREATE TABLE `my_cat` (
  `ceid` mediumint(5) unsigned NOT NULL auto_increment,
  `nome` varchar(100) NOT NULL,
  `eid` mediumint(8) unsigned NOT NULL,
  `colore` varchar(7) NOT NULL,
  `private` tinyint(3) unsigned NOT NULL default '0',
  `d_ini` date NOT NULL,
  `d_fine` date NOT NULL,
  `enable` tinyint(4) NOT NULL default '1',
  `desc` varchar(255) NOT NULL,
  `logo` varchar(100) NOT NULL,
  `genere` varchar(100) NOT NULL,
  PRIMARY KEY  (`ceid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
i campi che sono in relazione si chiamano eid in tutte e due le tabelle, un record della prima tabella può avere in relazione più record della seconda.

Io vorrei estrarre tutti i valori della prima tabella e tutti i valori della seconda tabella, i cui campi ev_dal,ev_al per la prima e d_ini,d_fine per la seconda sono compresi tra una precisa data e siano diversi da zero. io ho fatto una query in questo modo, ma non funziona a dovere, in pratica mi tira fuori dei valori che non sono compresi in quella precisa data

codice:
SELECT e.eid AS eid, c.eid AS eid_c FROM my_tab AS e,my_cat AS c WHERE e.enable=1 AND e.tipo='Pubblico' AND c.enable=1 AND (((e.ev_dal<='2008-12-06' AND '2008-12-06'<=e.ev_al) OR (c.d_ini<='2008-12-06' OR '2008-12-06'<=c.d_fine)) AND c.d_ini>'0000-00-00' AND e.ev_dal>'0000-00-00') HAVING eid=eid_c ORDER BY c.d_ini,e.ev_dal DESC
Dovresti strutturarla in maniera diversa dal mio punto di vista.. innanzitutto dovresti tenere nella tabella un solo campo data al posto di avere 'dal' 'al' poi l'intervallo lo calcoli, ti eviti molti problemi. Poi struttura una query di questo tipo:

'SELECT my_tab.*, my_cat.* FROM my_tab INNER JOIN my_cat ON my_tab.eid=my_cat.eid WHERE data BETWEEN '.$datamin.' AND '.$datamax;

Prende tutti i valori della prima e della seconda tabella compresi tra $datamin e $datamax, valori che puoi recuperare da un semplice form di ricerca...o se no togli $datami e $datamax e al loro posto metti la data che ti interessa.