Don't know whether it's just because it's late at night here in the UK or 
whether I'm being a bit dim, but wouldn't it be much, much easier to store 
all the data in your non-main tables in a single table and distinguish the 
type of data (i.e. fof, pub, gov, etc....) by a field. This would simplify 
your query and no doubt improve performance.


On Tuesday 29 Jul 2003 10:13 pm, Petre Agenbag wrote:
> Hi List
>  OK, I've posted this on the MySQL list as well, but it seems a bit quiet
> there, and arguably it could definately be a PHP rather than mysql question
> depending on whether it can be done with one query (then it was/is a mysql
> query), or whether it should be done with some structures and multiple
> queries ( then it's arguably PHP).
>
> So, here goes.
>
>
> I'm trying to return from multiple tables, the records that have field
> "information_sent" between two dates.
> The tables are all related by means of the id of the entry in the main
> table, ie..
>
> main
> id    entity_name     ...
>
> fof
> id_fof        id      information_sent ...
>
> pub
> id_pub        id      information_sent ...
>
> etc.
>
> So, I tried the following join
>
> select * from main
>               left join fof on main.id = fof.id
>               left join pub on main.id = pub.id
>               left join gov on main.id = gov.id
>               left join med on main.id = med.id
>               left join ngo on main.id = ngo.id
>               left join own on main.id = own.id
>               left join sup on main.id = sup.id
>               left join tra on main.id = tra.id
>               where (
>               (fof.information_sent > '$date1' and fof.information_sent < '$date2')
>               OR
>               (pub.information_sent > '$date1' and pub.information_sent < '$date2')
>               OR
>               (gov.information_sent > '$date1' and gov.information_sent < '$date2')
>               OR
>               (med.information_sent > '$date1' and med.information_sent < '$date2')
>               OR
>               (ngo.information_sent > '$date1' and ngo.information_sent < '$date2')
>               OR
>               (own.information_sent > '$date1' and own.information_sent < '$date2')
>               OR
>               (sup.information_sent > '$date1' and sup.information_sent < '$date2')
>               OR
>               (tra.information_sent > '$date1' and tra.information_sent < '$date2')
>               )
>               order by entity_name
>
>
> BUT, although it seems to be "joining" the tables correctly AND only
> returning the ones with the correct date criteria, it does NOT return
> the "id" or the "information_sent" fields correctly ( due to duplication
> in the result )
>
> Can this be done in one query without sub-selects, or should it be broken
> up (in which case I would still need help with the logic and to minimize
> the amount of queries inside loops)
>
>
> Thanks


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to