GoFuckYourself.com - Adult Webmaster Forum

GoFuckYourself.com - Adult Webmaster Forum (https://gfy.com/index.php)
-   Fucking Around & Business Discussion (https://gfy.com/forumdisplay.php?f=26)
-   -   MySQL experts: question (https://gfy.com/showthread.php?t=326953)

Varius 07-16-2004 12:46 PM

MySQL experts: question
 
Is this possible? (LEFT JOIN question)
I have two tables, I'll simplify them for the sake of this example:

table1:
campaign_id int unsigned not null default 0 key

table2:
month tinyint not null default 0 key
year smallint not null default 0 key
campaign_id int unsigned not null default 0 key
revenue double(5,2) not null default 0.00

What I"m trying to achieve is to get all the campaign_ids from table1, regardless of if they have a row in table2 or not.

This part I'm getting with:

"SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE (t2.campaign_id IS NULL OR t2.campaign_id IS NOT NULL)";

This will return me all campaign_ids from table1.

Here is my trouble:

If I want to add in my WHERE, a clause about the month/year, I always get back 0 results.

ie.

"SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE (t2.campaign_id IS NULL OR t2.campaign_id IS NOT NULL) AND t2.year=2004 AND t2.month=12";

* Is it possible for me to do this in one query? The results I want are simple, I want each campaign_id in table1 returned, with the revenue they earned IN THAT date range (if any).

Thx in advance !!

korzon 07-16-2004 12:53 PM

Instead of that stupid ass left join use "distinct".

M_M 07-16-2004 12:58 PM

SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE (t2.year=2004 AND t2.month=12) OR t2.campaign_id IS NULL

DrGuile 07-16-2004 01:14 PM

hmm, just a stupid question, but why do you have a month field and a year field... ??

why not a date field?

Varius 07-16-2004 01:28 PM

Quote:

Originally posted by DrGuile
hmm, just a stupid question, but why do you have a month field and a year field... ??

why not a date field?

I use int 10 fields usually for unix timestamps....but I made it simple for this example =)

Varius 07-16-2004 01:31 PM

Quote:

Originally posted by M_M
SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE (t2.year=2004 AND t2.month=12) OR t2.campaign_id IS NULL
Thanks!! This works, but now I have a final argument for the WHERE clause to add that's not working.

table1 also has this field:
uid int unsigned not null key

So how can I get the above, matching UID as well?

I tried this:

SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE ((t2.year=2004 AND t2.month=12) OR t2.campaign_id IS NULL) AND t1.uid=851

however it only returns me the rows from table1 which are NOT in table2.

Varius 07-16-2004 01:32 PM

Quote:

Originally posted by korzon
Instead of that stupid ass left join use "distinct".
Either you didn't understand my question, or you don't know MySQL very well.....

M_M 07-16-2004 01:33 PM

Quote:

Originally posted by Varius
Thanks!! This works, but now I have a final argument for the WHERE clause to add that's not working.

table1 also has this field:
uid int unsigned not null key

So how can I get the above, matching UID as well?

I tried this:

SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE ((t2.year=2004 AND t2.month=12) OR t2.campaign_id IS NULL) AND t1.uid=851

however it only returns me the rows from table1 which are NOT in table2.

SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE (t2.year=2004 AND t2.month=12 AND t1.uid=851) OR t2.campaign_id IS NULL

Varius 07-16-2004 01:37 PM

Quote:

Originally posted by M_M
SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE (t2.year=2004 AND t2.month=12 AND t1.uid=851) OR t2.campaign_id IS NULL
Tried that one too but doesn't work. That one returns ALL rows from table1, because of the OR I suspect....

Varius 07-16-2004 02:00 PM

Ok I think I've almost got it.

I need a way though to specify WHERE (month !=12 AND year !=2004) .....anyone ???

ie.

month=5, year=2004 * should come up
month=12, year=2002 * should come up
month=12, year=2004 * shouldn't come up

Right now using WHERE (month !=12 AND year !=2004), none of the above return rows.

If I can get the above into a $where, the other query will work like this:

SELECT t1.campaign_id, t2.revenue FROM table1 t1 LEFT JOIN table2 t2 ON t1.campaign_id=t2.campaign_id WHERE t1.uid=851 AND ((t2.year=2004 AND t2.month=12) OR t2.campaign_id IS NULL OR $where)


All times are GMT -7. The time now is 07:29 PM.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
©2000-, AI Media Network Inc123