[development] Making a whole site location aware - a design question

Dave Cohen drupal at dave-cohen.com
Tue Aug 22 17:31:10 UTC 2006


On Monday 21 August 2006 23:15, Scott McLewin wrote:
> I've run into a condition where my nodes with
> locative data filter exactly as I want them to based on location, but
> nodes without locative data don't show up (I know why - it is because I
> INNER JOINED them with the location table, which yields no result).

Have you tried the following?

$return['where'] = "a.longitude IS NULL OR your_where_clause_here";

If that doesn't work...

If you can enforce that a certain node types always have location data, your 
where clause could like like

$return['where'] = "$primary_table.type IN (list_of_node_types) OR 
your_where_clause";

You could try a nested query, but this may have problems with efficiency and 
portability

$return['where'] = "$primary_table.nid NOT IN (SELECT oid FROM {location}) OR 
your_where_clause";

And you could write a hook_nodeapi that inserts a row in location for every 
node, inserting NULL for values.  Then use the first query above.  This may 
have a problem for nodes inserted before your module was installed, however.

> If this thread has become inappropriate for the overall developers list,
> I've placed a copy of it on http://mclewin.com/node/495.  My
> hook_db_rewrite_sql implementation is posted there as well.

I'm writing here in case someone has a better idea.

Finally, I recommend you don't alias {location} to 'a'.  It's really not a 
descriptive abbreviation, and likely to cause conflicts with some other 
hook_db_rewrite_sql eventually.  Why not use 'location' and never have to 
worry about that?

-Dave


More information about the development mailing list