Question

I've got following two queries :

SELECT date( FROM_UNIXTIME( user_reg_date ) ) 'Current Date', COUNT( * ) 'registered_user'
FROM users
WHERE user_reg_date >=1341100800
AND user_reg_date <=1374451200
GROUP BY date( FROM_UNIXTIME( user_reg_date ) )

SELECT date( FROM_UNIXTIME( user_last_login ) ) 'Current Date', COUNT( * ) 'logged_in_user'
FROM users
WHERE user_last_login >=1341100800
AND user_last_login <=1374451200
GROUP BY date( FROM_UNIXTIME( user_last_login ) )

Now I want merge the two arrays which I got from the above query and each array element should be of the following form.

date = > array(registered_user, logged_in_user)

Can anyone help me in this regard? Thanks in advance.

Was it helpful?

Solution

You could do a very simple UNION ALL and group by date later with a SUM to get the values;

SELECT DATE(FROM_UNIXTIME(date)) date, 
       SUM(registered_user) registered_user, 
       SUM(logged_in_user) logged_in_user
FROM (
  SELECT user_reg_date date, 1 registered_user, 0 logged_in_user FROM users
  UNION ALL
  SELECT user_last_login,    0 registered_user, 1 logged_in_user FROM users
) a
WHERE date >= 1341100800 AND date <= 1374451200
GROUP BY DATE(FROM_UNIXTIME(date));

OTHER TIPS

Use UNION like

SELECT date( FROM_UNIXTIME( user_reg_date ) ) 'Current Date', COUNT( * ) 'registered_user'
FROM users
WHERE user_reg_date >=1341100800
AND user_reg_date <=1374451200
GROUP BY date( FROM_UNIXTIME( user_reg_date ) )

UNION

SELECT date( FROM_UNIXTIME( user_last_login ) ) 'Current Date', COUNT( * )   'logged_in_user'
FROM users
WHERE user_last_login >=1341100800
AND user_last_login <=1374451200
GROUP BY date( FROM_UNIXTIME( user_last_login ) )

But careful with the duplicate columns that these two tables have.Try to call them using table object like

table1.id,table2.id

Consider that id has exists in both the tables.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top