ORDER BY last_online werkt niet door OR clause in LEFT JOIN.
Ik heb een probleem waar ik niet uit kom. Ik ben bezig met een vriendenlijst, welke overigens werkt op het ordenen na.
Naar mijn weten werkt dit niet omdat ik een OR clause in mijn LEFT JOIN heb staan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT friends.friend_inviter, friends.friend_accepter, friends.friend_status, times.last_online
FROM friends
LEFT JOIN times
ON friends.friend_inviter
OR friends.friend_accepter =
times.username
WHERE (friends.friend_inviter =
'".$_GET['nick']."'
OR friends.friend_accepter =
'".$_GET['nick']."')
AND friends.friend_status =
'Accepted'
ORDER BY times.last_online
LIMIT 10
FROM friends
LEFT JOIN times
ON friends.friend_inviter
OR friends.friend_accepter =
times.username
WHERE (friends.friend_inviter =
'".$_GET['nick']."'
OR friends.friend_accepter =
'".$_GET['nick']."')
AND friends.friend_status =
'Accepted'
ORDER BY times.last_online
LIMIT 10
Daardoor weet hij niet welke die moet gebruiken. Iemand een idee hoe ik dit kan oplossen?
Je $_GET zo in de query is vragen om problemen. Zie SQL-Injection.
Wat betreft de injection. Daar ben ik me van bewust, ik heb het alleen nu zo even gauw getypt omdat het niet uitmaakt in deze kwestie.
Gewijzigd op 13/04/2013 13:35:00 door Richard Hansma
2) FROM
3) LEFT/RIGHT/INNER JOIN
4) WHERE
5) AND / OR / IS (NOT) BETWEEN
6) GROUP BY
7) ORDER BY
8) LIMIT
Probeer deze volgorde eens aan te houden.
Gewijzigd op 13/04/2013 13:56:29 door Eddy E
maar zo
Code (php)
1
2
2
ON friends.friend_inviter = times.username
OR friends.friend_accepter = times.username
OR friends.friend_accepter = times.username
Het is niet 'dit of dat gelijk aan iets', maar 'dit gelijk aan iets, of dat gelijk aan iets'.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT friends.friend_inviter, friends.friend_accepter, friends.friend_status, times.last_online
FROM friends
LEFT JOIN times
ON friends.friend_inviter = times.username
OR friends.friend_accepter = times.username
WHERE (friends.friend_inviter =
'".$_GET['nick']."'
OR friends.friend_accepter =
'".$_GET['nick']."')
AND friends.friend_status = 'Accepted'
ORDER BY times.last_online
LIMIT 10
FROM friends
LEFT JOIN times
ON friends.friend_inviter = times.username
OR friends.friend_accepter = times.username
WHERE (friends.friend_inviter =
'".$_GET['nick']."'
OR friends.friend_accepter =
'".$_GET['nick']."')
AND friends.friend_status = 'Accepted'
ORDER BY times.last_online
LIMIT 10
Gewijzigd op 13/04/2013 14:24:53 door Richard Hansma
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT friends.friend_inviter, friends.friend_accepter, friends.friend_status, times.last_online
FROM friends
LEFT JOIN times ON(
( friends.friend_inviter = times.username
AND friends.friend_accepter = '".$_GET['nick']."' )
OR
( friends.friend_inviter = '".$_GET['nick']."'
AND friends.friend_accepter = times.username )
)
WHERE friends.friend_status = 'Accepted'
ORDER BY times.last_online
LIMIT 10
FROM friends
LEFT JOIN times ON(
( friends.friend_inviter = times.username
AND friends.friend_accepter = '".$_GET['nick']."' )
OR
( friends.friend_inviter = '".$_GET['nick']."'
AND friends.friend_accepter = times.username )
)
WHERE friends.friend_status = 'Accepted'
ORDER BY times.last_online
LIMIT 10
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT friends.friend_inviter, friends.friend_accepter, friends.friend_status, times.last_online
FROM friends
LEFT JOIN times
ON(
( friends.friend_inviter = times.username
AND friends.friend_accepter = '".$_GET['nick']."' )
OR
( friends.friend_accepter = times.username
AND friends.friend_inviter = '".$_GET['nick']."' )
)
WHERE friends.friend_status = 'Accepted'
AND friends.friend_accepter = '".$_GET['nick']."'
OR friends.friend_inviter = '".$_GET['nick']."'
ORDER BY times.last_online
LIMIT 10
FROM friends
LEFT JOIN times
ON(
( friends.friend_inviter = times.username
AND friends.friend_accepter = '".$_GET['nick']."' )
OR
( friends.friend_accepter = times.username
AND friends.friend_inviter = '".$_GET['nick']."' )
)
WHERE friends.friend_status = 'Accepted'
AND friends.friend_accepter = '".$_GET['nick']."'
OR friends.friend_inviter = '".$_GET['nick']."'
ORDER BY times.last_online
LIMIT 10
Als ik
Code (php)
1
2
2
friends.friend_inviter = times.username
AND friends.friend_accepter = '".$_GET['nick']."'
AND friends.friend_accepter = '".$_GET['nick']."'
of
Code (php)
1
2
2
friends.friend_accepter = times.username
AND friends.friend_inviter = '".$_GET['nick']."'
AND friends.friend_inviter = '".$_GET['nick']."'
weghaal uit mijn ON clause geeft hij alles dubbel.
En als ik het weghaal uit mijn WHERE clause, dan krijg ik het niet meer dubbel maar pakt hij ook de friend_status van anderen.
Ik vind het op zich prima zo, aangezien het werkt. Maar het lijkt me zo 'dubbel', ondanks dat het misschien allebei een andere functie heeft.
Gewijzigd op 13/04/2013 15:08:09 door Richard Hansma