RE: Need nulls in my join

2003-01-26 Thread Loren McDonald
Seeing a little more data on your situation does change things quite a
bit.  It sounds like you are also needing to use a SELECT DISTINCT of
specific criteria, so that you avoid pulling the same thing more than
once.  What those criteria are, naturally depends on what the various
possibilities are and how (exactly) you want to pull the data.

-- 
Loren McDonald AKA MisterrMac
[EMAIL PROTECTED]


 -Original Message-
 From: Hoffman, Geoffrey [mailto:[EMAIL PROTECTED]]
 Sent: Saturday, January 25, 2003 3:48 PM
 To: [EMAIL PROTECTED]
 Subject: RE: Need nulls in my join
 
 Unfortunately I tried to implement what you suggested, but in my case
it
 didn't work.
 
 I have stories that can have zero or more photos, one or more author,
one
 or
 more sections, and one or more active dates.
 
 Trying to join all those items together using your suggestion actually
did
 return stories with no photo, but I would then get 3 copies of a story
 that
 had 3 photos, and 6 copies of a 2-photo story that appears on 3 days.
 
 What I really need is mysql 4's SELECT blah WHERE (SELECT blah)
subselect
 feature, but that's not an option either due to the host I'm using. I
 ended
 up writing a simpler query get all the unique story id's for a
section,
 then
 doing a foreach loop in PHP to query for all the additional data for
the
 story where ID = $loopindex.
 
 I'm sure there's a supermysqlguru out there who cringes when you issue
a
 bunch of queries in a PHP loop, but it works fine for now.
 
 Thanks though - I'm sure I'll use your suggestion somewhere in the app
I'm
 working on.
 
 Geoff
 
  -Original Message-
  From: Loren McDonald [mailto:[EMAIL PROTECTED]]
  Sent: Saturday, January 25, 2003 1:41 PM
  To: Hoffman, Geoffrey; [EMAIL PROTECTED]
  Subject: RE: Need nulls in my join
 
 
  Oopssorry.  That should have been GROUP BY and not GROUP ON
 
  That's what I get for answering a post at 2am.  :)
 
  --
  Loren McDonald AKA MisterrMac
  [EMAIL PROTECTED]
 
 
   This one is relatively simple:
  
   Drop the WHERE evtphoto.phtusage = 1.
   SELECT it and then GROUP ON it.
  
   --
   Loren McDonald AKA MisterrMac




-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




RE: Need nulls in my join

2003-01-25 Thread Loren McDonald
This one is relatively simple:

Drop the WHERE evtphoto.phtusage = 1. 
SELECT it and then GROUP ON it.

-- 
Loren McDonald AKA MisterrMac
Gods Of Music Reviewer/Editor
[EMAIL PROTECTED]
http://www.GodsOfMusic.com


 -Original Message-
 From: Hoffman, Geoffrey [mailto:[EMAIL PROTECTED]]
 Sent: Friday, January 24, 2003 7:28 PM
 To: [EMAIL PROTECTED]
 Subject: Need nulls in my join
 
 I have an SQL query that LEFT JOINs four different tables to a main
table,
 based on several foreign keys.
 
 It's returning only stories in a section that have photos,
 but I need it to return all the stories in a section whether
 it has a photo or not.
 
 I think the problem is in the
 WHERE evtphoto.phtusage = 1 -- if there's no photo,
 then there's no phtusage.
 
 Should I split this up into two queries, to get all
 the story IDs for a section/day and then get the
 photos for the stories in a 2nd query?
 Or do I need a different join type?
 Or do I put the WHERE clauses in a different order?
 
 Here's the query:
 
 
 SELECT
 evtstorysection.secid,
 evtstory.styid,
 evtstory.styheadline,
 evtstory.stysummary,
 evtstory.styintro,
 evtstory.stypubdate,
 evtphoto.phturl,
 evtphoto.phtcaption,
 evtstoryorder.stoorder,
 evtlayoutsum.lytstring
 
 FROM
 evtstory
 
 LEFT JOIN evtlayoutsumON evtstory.slytid = evtlayoutsum.lytid
 LEFT JOIN evtstorysection ON evtstory.styid = evtstorysection.styid
 LEFT JOIN evtstoryorder   ON evtstory.styid = evtstoryorder.styid
 LEFT JOIN evtphotoON evtstory.styid = evtphoto.styid
 
 WHERE
 evtphoto.phtusage = 1 AND
 evtstorysection.secid = 3 AND
 evtstoryorder.secid = 3 AND
 evtstoryorder.stodate = '2003-01-24' AND
 evtstory.stypubdate = '2003-01-24' AND
 evtstory.styexpdate  '2003-01-24'
 
 ORDER BY
 evtstoryorder.stoorder




-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: Need nulls in my join

2003-01-25 Thread Adolfo Bello
On Fri, 2003-01-24 at 20:27, Hoffman, Geoffrey wrote:
 I have an SQL query that LEFT JOINs four different tables to a main table, 
 based on several foreign keys.
 
 It's returning only stories in a section that have photos, 
 but I need it to return all the stories in a section whether 
 it has a photo or not.
 
 I think the problem is in the 
 WHERE evtphoto.phtusage = 1 -- if there's no photo, 
 then there's no phtusage.
 
 Should I split this up into two queries, to get all 
 the story IDs for a section/day and then get the 
 photos for the stories in a 2nd query? 
 Or do I need a different join type? 
 Or do I put the WHERE clauses in a different order?
 
 Here's the query:
 
 
 SELECT
 evtstorysection.secid,
 evtstory.styid, 
 evtstory.styheadline, 
 evtstory.stysummary, 
 evtstory.styintro,  
 evtstory.stypubdate, 
 evtphoto.phturl,
 evtphoto.phtcaption,
 evtstoryorder.stoorder,
 evtlayoutsum.lytstring
 
 FROM
 evtstory
 
 LEFT JOIN evtlayoutsumON evtstory.slytid = evtlayoutsum.lytid
 LEFT JOIN evtstorysection ON evtstory.styid = evtstorysection.styid
 LEFT JOIN evtstoryorder   ON evtstory.styid = evtstoryorder.styid
 LEFT JOIN evtphotoON evtstory.styid = evtphoto.styid
LEFT JOIN evtphoto nophoto ON evtstory.styid = nophoto.styid
 
 WHERE
 evtphoto.phtusage = 1 AND
Replace above line with:
(evtphoto.phtusage = 1 OR nophoto.phtusage IS NULL) AND
 evtstorysection.secid = 3 AND 
 evtstoryorder.secid = 3 AND
 evtstoryorder.stodate = '2003-01-24' AND
 evtstory.stypubdate = '2003-01-24' AND
 evtstory.styexpdate  '2003-01-24'
 
 ORDER BY
 evtstoryorder.stoorder
 

__   
   / \\   @   __ __@   Adolfo Bello [EMAIL PROTECTED]
  /  //  // /\   / \\   // \  //   Bello Ingenieria S.A, ICQ: 65910258
 /  \\  // / \\ /  //  //  / //cel: +58 416 609-6213
/___// // / _/ \__\\ //__/ // fax: +58 212 952-6797
www.bisapi.com   //pager: www.tun-tun.com (# 609-6213)


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




RE: Need nulls in my join

2003-01-25 Thread Loren McDonald
Oopssorry.  That should have been GROUP BY and not GROUP ON

That's what I get for answering a post at 2am.  :)

-- 
Loren McDonald AKA MisterrMac
[EMAIL PROTECTED]


 This one is relatively simple:
 
 Drop the WHERE evtphoto.phtusage = 1.
 SELECT it and then GROUP ON it.
 
 --
 Loren McDonald AKA MisterrMac




-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




RE: Need nulls in my join

2003-01-25 Thread Hoffman, Geoffrey
Unfortunately I tried to implement what you suggested, but in my case it
didn't work.

I have stories that can have zero or more photos, one or more author, one or
more sections, and one or more active dates.

Trying to join all those items together using your suggestion actually did
return stories with no photo, but I would then get 3 copies of a story that
had 3 photos, and 6 copies of a 2-photo story that appears on 3 days.

What I really need is mysql 4's SELECT blah WHERE (SELECT blah) subselect
feature, but that's not an option either due to the host I'm using. I ended
up writing a simpler query get all the unique story id's for a section, then
doing a foreach loop in PHP to query for all the additional data for the
story where ID = $loopindex. 

I'm sure there's a supermysqlguru out there who cringes when you issue a
bunch of queries in a PHP loop, but it works fine for now.

Thanks though - I'm sure I'll use your suggestion somewhere in the app I'm
working on.

Geoff

 -Original Message-
 From: Loren McDonald [mailto:[EMAIL PROTECTED]]
 Sent: Saturday, January 25, 2003 1:41 PM
 To: Hoffman, Geoffrey; [EMAIL PROTECTED]
 Subject: RE: Need nulls in my join
 
 
 Oopssorry.  That should have been GROUP BY and not GROUP ON
 
 That's what I get for answering a post at 2am.  :)
 
 -- 
 Loren McDonald AKA MisterrMac
 [EMAIL PROTECTED]
 
 
  This one is relatively simple:
  
  Drop the WHERE evtphoto.phtusage = 1.
  SELECT it and then GROUP ON it.
  
  --
  Loren McDonald AKA MisterrMac
 
 
 
 


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: Need nulls in my join

2003-01-25 Thread Benjamin Pflugmann
Hi.

On Sat 2003-01-25 at 14:25:14 -0400, [EMAIL PROTECTED] wrote:
 On Fri, 2003-01-24 at 20:27, Hoffman, Geoffrey wrote:
[...]
  It's returning only stories in a section that have photos, 
  but I need it to return all the stories in a section whether 
  it has a photo or not.
  
  I think the problem is in the 
  WHERE evtphoto.phtusage = 1 -- if there's no photo, 
  then there's no phtusage.
[...]

You simply have to move that condition from the WHERE clause to the
appropriate ON clause (and drop the part you put in to handle the case
without photo):

  SELECT
evtstorysection.secid,
[...]
  FROM
evtstory
LEFT JOIN evtlayoutsum ON evtstory.slytid = evtlayoutsum.lytid
LEFT JOIN evtstorysection  ON evtstory.styid = evtstorysection.styid
LEFT JOIN evtstoryorderON evtstory.styid = evtstoryorder.styid
LEFT JOIN evtphoto ON evtstory.styid = evtphoto.styid AND
  evtphoto.phtusage = 1
  WHERE
evtstorysection.secid = 3 AND 
evtstoryorder.secid = 3 AND
evtstoryorder.stodate = '2003-01-24' AND
evtstory.stypubdate = '2003-01-24' AND
evtstory.styexpdate  '2003-01-24'
  ORDER BY
evtstoryorder.stoorder
  

HTH,

Benjamin.

-- 
[EMAIL PROTECTED]

-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php