![]() |
1 more left join problem :(
ok i tried to run this query
[SQL] $teamusers = $DB_site->query("SELECT * FROM " . TABLE_PREFIX . "user LEFT JOIN " . TABLE_PREFIX . "session ON(session.userid = user.userid) WHERE user.teamid='$teamid' "); [/SQL] this query should get all users which in $teamid and their online status now query works fine but if userid show up few times in sessions then its show up the user few times but i want it to show each user only 1 time what am i doing worng ? thanx for help |
This is tricky ...
Which information from the session table do you need? Because if you GROUP BY session.userid, it will just take one session for each user, but not necessarily the active one |
hmmm
this is what im tring to do PHP Code:
list of users which in $teamid and their online status but its get ++++ed up some where |
Change:
SELECT * to SELECT DISTINCT session.userid, user.username |
Quote:
and its show me only 1 time the user but its also give me worng online status btw what the word DISTINCT means ? EDIT : ===== for online status you should get also session.lastactivity i tired add it and its again gave me 2 user names |
DISTINCT means you only return unique rows. Ummm try:
[sql] SELECT * FROM " . TABLE_PREFIX . "user LEFT JOIN " . TABLE_PREFIX . "session ON(session.userid = user.userid) WHERE user.teamid='$teamid' GROUP BY userid ORDER BY session.lastactivity DESC [/sql] [/sql] |
As I already said above, GROUP BY will not necessarily catch the last session ...
|
deans would probably work if you select distinct and remove the group by as it's getting the last session to check the timeout it should return the wanted information.
|
THANK YOU VERY MUCH
you guys have been replly helpfull to me now please 1 more qustion [SQL]$teamslist = $DB_site->query(" SELECT teams.*,user.username AS username, user.userid AS userid ,user.posts AS userposts, user.reputation AS userrep FROM " . TABLE_PREFIX . "teams AS teams LEFT JOIN user ON(teams.teamid = user.teamid) WHERE teams.teamid > 1 GROUP BY teams.teamid ");[/SQL] now i want it to take all userposts and count them togeder is that possible ? |
You'll need to do the count in a seperate query AFAIK :)
Btw can you show the query you used in the end to get the sessions working :)? |
Quote:
PHP Code:
|
You need to put parentheses around the asterix sabe :):
[sql] SELECT COUNT(*) as total FROM user [/sql] |
Btw, the reason you were returning more than one result is because of the session timeout. You shouldn't need to group by at all if you add this clause to your query:
AND session.lastactivity > " . (TIMENOW - $vboptions['cookietimeout']) . " |
Quote:
PHP Code:
i run about 100 tests lol and i surely can say that i understand left joins better now i want to run count inside the left join and i need to update counters for each team :\ sucks Quote:
i want to do like user.posts =5 (userid=1) user.posts=6 (userid=5) total teams posts = 6 can i do query for that? never mind i fixed it this is the query [SQL] $teamslist = $DB_site->query(" SELECT teams.*,user.username AS username, user.userid AS userid ,user.posts AS userposts, user.reputation AS userrep,COUNT(user.posts) AS totalteamposts FROM " . TABLE_PREFIX . "teams AS teams LEFT JOIN user ON(teams.teamid = user.teamid) WHERE teams.teamid > 1 GROUP BY teams.teamid "); [/SQL] |
Quote:
|
heh my mistake - to tierd you right shuold be 11
how am i doing that ? do i need an exstra query for update ? cuse now i will need to run 1 exstra query for each team... |
Quote:
or if you've already got the posts, just do a mysql_num_rows() on the query, either will give you the info you desire. |
you got me worng
i did this query PHP Code:
so i want to update teams.teamposts now the value of total team posts is in $teams['totalteamposts'] now my qustion is if there a way to update teams.teamposts=$teams['totalteamposts'] without exstra query or if i must use exstra query do i need to run the query for each team (in the while loop) so code should look like that PHP Code:
if i got 100 teams i add 100 query's something i dont want to do so im looking for other way... any ideas ? |
you're best bet would be to psuedo cache the data
in the while have $count++ $row[$count] = $totalteamposts then outside of the while add up the data from $row[0] -> $row[10] and beneath that to the update saying that, not being sure if you can do that, it might now work. actually ignore that, i know it's simpler than that, i'll have to come back to this, my minds gone blank ahhh that's it try $totalteamposts .= $teamposts[posts] . " + "; then just remove the extra " + " at the end and throw it into a ceil() |
Quote:
well dosent help me much my problem isnt about counting cuse im doing it on the first query my problem is to update do i need to run exstra query for every team ? there must be an other way... to update all teams in 1 query. |
i honestly can't think of a way to do it all in one query.
|
EDIT :
[SQL] COUNT(user.posts) AS totalteamposts, [/SQL] does the counting part - so no problems for me on counting problem is to set new value on teams.teamposts where teamid = teams.teamid Quote:
no-way there must be a way to figure it out.. |
miz I'm finding it difficult to understand what you're trying to accomplish here. Can you just spend a couple of minutes thinking through about what you're asking and try and structure your request in a way we can understand it better. Thanks
|
Quote:
i want my php page will show list of all teams on board then take all users on $teamid and count there posts then update teamposts in table teams this is the main idea now this query PHP Code:
now my qustion is : is there any way to combine the UPDATE of teams table with the query above now the easy way to do update is on the while loop but its mean the script will make 1 exstra query for each team so if i got 100 teams on board it will make 100 querys more then should be in other words, i want to update all teams info in 1 query how i can do that ? |
You cannot do a select and update in one query. Drop the COUNT(user.posts) bit and then count the posts as you go along within the while loop. Before the while have $totalposts = 0; then in the while loop have $totalposts += $var['userposts'];
Then you do your update query outside the loop :) |
Quote:
cuse every team got other count of posts and it got replaced in every time the while loop runs or i got you all worng can you show me exsample ? |
Oh I see what you mean now, I thought you had a clause on the query to show that info for one team only. Um in that case a better idea would be to run a vB3 cron every 24hours to update the total posts for the team :)
|
Quote:
this is what i made : PHP Code:
but im getting this error PHP Code:
[SQL] UPDATE teams SET posts=5 WHERE teamid=2;UPDATE teams SET posts=1 WHERE teamid=3;UPDATE teams SET posts=0 WHERE teamid=4;UPDATE teams SET posts=0 WHERE teamid=5;UPDATE teams SET posts=0 WHERE teamid=6;[/SQL] im getting this : [SQL] our SQL-query has been executed successfully SQL-query: UPDATE teams SET posts =5 WHERE teamid =2;# MySQL returned an empty result set (i.e. zero rows). UPDATE teams SET posts =1 WHERE teamid =3;# MySQL returned an empty result set (i.e. zero rows). UPDATE teams SET posts =0 WHERE teamid =4;# MySQL returned an empty result set (i.e. zero rows). UPDATE teams SET posts =0 WHERE teamid =5;# MySQL returned an empty result set (i.e. zero rows). UPDATE teams SET posts =0 WHERE teamid =6;# MySQL returned an empty result set (i.e. zero rows). [/SQL] so my qustion is what am i doing worng on php so its not working? i think we very close to get and answer. |
You can only run one query at a time via mysql_query. Like I said above the most efficient way is via vBcron. I would strongly advise against running a query within a loop. And especially when it's being run everytime that page is loaded!
|
i guss i dont have much options left
thanks for all of help to all of you guys |
All times are GMT. The time now is 01:59 AM. |
Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
![]() |
|
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|