Question

I want to know how to complete this query correctly.

I wish to export a full list of votes from all ips used by an user.


My database have 3 tables storing the relatives data =>

votes = vote_site_id | vote_ip | vote_time

connexions_ip = adresse_ip | user_id | connexion_time

users = user_id | user_name | user_ip


So actually I have this query to have all connexions_ip from one user =>

SELECT c.adresse_ip, c.user_id, u.user_name
    FROM connexions_ip c 
    LEFT JOIN users u ON u.user_id = c.user_id
WHERE u.user_id = '1'

And this query to have all votes from one user =>

SELECT v.vote_site_id, v.vote_ip, v.vote_time, u.user_name
    FROM votes v 
    LEFT JOIN users u ON u.user_ip = v.vote_ip 
WHERE user_id = '1'

I tried with subquery but I have this error "#1242 - Subquery returns more than 1 row"

SELECT v.vote_site_id, v.vote_ip, v.vote_time, u.user_name
    FROM votes v 
    LEFT JOIN users u ON (
SELECT c.adresse_ip
    FROM connexions_ip c 
    LEFT JOIN users u ON u.user_id = c.user_id
WHERE u.user_id = '1'
)
 = v.vote_ip 
WHERE user_id = '1'

Thanks for your help.

Was it helpful?

Solution

You can join all the table

SELECT c.adresse_ip, c.user_id, u.user_name
     , v.vote_site_id, v.vote_ip, v.vote_time
FROM   users u
       LEFT JOIN connexions_ip c ON u.user_id = c.user_id
       LEFT JOIN votes v ON u.user_ip = v.vote_ip 
WHERE  u.user_id = '1'

I choosed the table users as the base for FROM because is the only table with a condition.

OTHER TIPS

try this:

select a.*,b.* from (SELECT c.adresse_ip, c.user_id, u.user_name
    FROM connexions_ip c 
    LEFT JOIN users u ON u.user_id = c.user_id
WHERE u.user_id = '1')a left join (SELECT u.user_id,v.vote_site_id, v.vote_ip, v.vote_time, u.user_name
    FROM votes v 
    LEFT JOIN users u ON u.user_ip = v.vote_ip 
WHERE user_id = '1')b on a.user_id  = b.user_id 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top