Author |
Topic |
mortioli
Average Member
United Kingdom
898 Posts |
Posted - 29 March 2003 : 10:43:27
|
Hiya!
Just wondered if someone would be able to help me out...
I'm trying to list all the countries, with a number to show how many are from each. I have this code to do it:
Set rs = Server.CreateObject("ADODB.Recordset")
StrSql = "SELECT M.M_COUNTRY, " & _
"COUNT(M.MEMBER_ID) AS M_COUNT " & _
"FROM FORUM_MEMBERS M " & _
"GROUP BY M.M_COUNTRY " & _
"ORDER BY COUNT(M.MEMBER_ID) DESC;"
rs.Open StrSql, my_Conn
do until rs.eof
strCountryName = Trim(rs("M_COUNTRY"))
if strCountryName = "" then strCountryName = "Unknown"
Response.write "<font face=""" & strDefaultFontFace & """ size=""" & strDefaultFontSize & """ color=""" & strDefaultFontColor & """>" & strCountryName & " - <i>" & rs("M_COUNT") & "</i></font><br>"
rs.movenext
loop
rs.Close
set rs = nothing
But the trouble is, I'd like to be able to determine where I put each country count...eg, I could put UK in a table, USA somewhere else etc etc.
I came up with this code:
function getUSACount
set rs = server.CreateObject("adodb.recordset")
strSql = "SELECT COUNT(*) as USA" & strMemberTablePrefix & "MEMBERS WHERE M_COUNTRY = 'USA'"
rs.Open strSql, my_Conn
getUSACount = rs("USA")
rs.Close
end function
...but it means I would have to write that out for each individual country.
My question is, would their be a way to get all the info, and then use (for example) USACOUNT to display the count for the USA etc etc
Sorry if it seems an odd explanation
Thanks for any help |
|
mortioli
Average Member
United Kingdom
898 Posts |
Posted - 01 April 2003 : 16:20:32
|
Any ideas |
|
|
Steve D.
Average Member
USA
640 Posts |
Posted - 01 April 2003 : 16:26:40
|
wouldn't you want to put it in a table and list it out as follows
Country A | # of members from Country A Country B | # of members from Country B Country C | # of members from Country C Country D | # of members from Country D Country E | # of members from Country E etc...
If so just loop through the recordset and output M.M_COUNTRY in one cell and M_COUNT in the next... |
Swing Dancing Video Clips - It's All Swing! Forum |
|
|
mortioli
Average Member
United Kingdom
898 Posts |
Posted - 02 April 2003 : 11:51:51
|
Nah, I want to pick out the countries I want, and put them in different places |
|
|
mortioli
Average Member
United Kingdom
898 Posts |
Posted - 07 April 2003 : 11:46:15
|
Any more ideas
EDIT: Please? I really want to try and sort something out which needs this code |
Edited by - mortioli on 20 April 2003 12:00:57 |
|
|
bjlt
Senior Member
1144 Posts |
Posted - 20 April 2003 : 12:21:24
|
how about this
function getCountryCount(psCountryName)
Dim rs, strSql, lTemp
set rs = server.CreateObject("adodb.recordset")
strSql = "SELECT COUNT(MEMBER_ID) as CountryCount FROM " & strMemberTablePrefix & "MEMBERS WHERE M_COUNTRY = '" & chkString(psCountryName,"SQLString") & "'"
rs.Open strSql, my_Conn
lTemp = rs("CountryCount")
rs.Close
set rs = nothing
getCountryCount = lTemp
end function
|
Edited by - bjlt on 20 April 2003 12:28:39 |
|
|
Etymon
Advanced Member
United States
2385 Posts |
Posted - 21 April 2003 : 11:15:48
|
Thank you bjlt for the code! I want to use it for how many guys and gals are in my forum. I am using the Gender MOD.
Cheers,
Etymon |
|
|
bjlt
Senior Member
1144 Posts |
Posted - 22 April 2003 : 12:02:13
|
Etymon, have you come up with the codes you need? I don't have the gerder mod but here's the code for it.
use it as getGenderCount(1)
function getGenderCount(piGender) '# e.g. 1: male, 2 female ...
Dim rs, strSql, lTemp
set rs = server.CreateObject("adodb.recordset")
strSql = "SELECT COUNT(MEMBER_ID) as GenderCount FROM " & strMemberTablePrefix & "MEMBERS WHERE M_SEX = " & CLng(piGender)
rs.Open strSql, my_Conn
lTemp = rs("GenderCount")
rs.Close
set rs = nothing
getGenderCount = lTemp
end function
I don't know the field name for gender used in gender mod you have, change M_SEX to the one it uses if it's not the one.
Also if the gender mod uses male/female etc for sex instead of 1/2, you need to change it to WHERE M_SEX = '" & chkString(piGender,"SQLString") & "'" then you use it as getGenderCount("male")
Cheers, |
Edited by - bjlt on 12 May 2003 23:44:56 |
|
|
mortioli
Average Member
United Kingdom
898 Posts |
Posted - 22 April 2003 : 17:12:22
|
quote: Originally posted by bjlt
how about this
function getCountryCount(psCountryName)
Dim rs, strSql, lTemp
set rs = server.CreateObject("adodb.recordset")
strSql = "SELECT COUNT(MEMBER_ID) as CountryCount FROM " & strMemberTablePrefix & "MEMBERS WHERE M_COUNTRY = '" & chkString(psCountryName,"SQLString") & "'"
rs.Open strSql, my_Conn
lTemp = rs("CountryCount")
rs.Close
set rs = nothing
getCountryCount = lTemp
end function
Isn't that the same code as the one in my first post
It means having to change certain parts of it three times for each country (which gets very tedious ), or do I have it wrong!?
Sorry |
|
|
bjlt
Senior Member
1144 Posts |
Posted - 23 April 2003 : 07:20:57
|
How do you want to use it? mine has a parameter, use it like this: getCountryCount("USA") getCountryCount("Japan") is it what you want?
|
|
|
mortioli
Average Member
United Kingdom
898 Posts |
Posted - 23 April 2003 : 14:52:36
|
But to get the count, for example, for the USA, I'd have to change the parts in red...
function getCountryCount(USA)
Dim rs, strSql, lTemp
set rs = server.CreateObject("adodb.recordset")
strSql = "SELECT COUNT(MEMBER_ID) as USA FROM " & strMemberTablePrefix & "MEMBERS WHERE M_COUNTRY = '" & chkString(USAe,"SQLString") & "'"
rs.Open strSql, my_Conn
lTemp = rs("USA")
rs.Close
set rs = nothing
getCountryCount = lTemp
end function
Or do I have that all wrong |
|
|
bjlt
Senior Member
1144 Posts |
Posted - 23 April 2003 : 15:28:59
|
the diff between yours and mine is that there's a parameter in mine. no you don't have to change all of them, the code will handle it for you. and that's what a parameter do.
getCountryCount("USA") will get you the count for USA getCountryCount("Japan") will get you the count for Japan.
How about you just try it and see if it works?
response.write getCountryCount("USA") or <%=getCountryCount("Japan")%>
look at the code you can see how a parameter works, and how can a filed name be used.
function getCountryCount(psCountryName)
Dim rs, strSql, lTemp
set rs = server.CreateObject("adodb.recordset")
strSql = "SELECT COUNT(MEMBER_ID) as CountryCount FROM " & strMemberTablePrefix & "MEMBERS WHERE M_COUNTRY = '" & chkString(psCountryName,"SQLString") & "'"
rs.Open strSql, my_Conn
lTemp = rs("CountryCount")
rs.Close
set rs = nothing
getCountryCount = lTemp
end function
it dosen't matter if you change CountryCount to whatever no matter what a country you want to count, it's just the filed name you select for the count result, and later we do retrieve the result by getting the value of the field : rs("CountryCount") |
Edited by - bjlt on 23 April 2003 15:44:18 |
|
|
mortioli
Average Member
United Kingdom
898 Posts |
Posted - 25 April 2003 : 15:34:40
|
That works great! Thanks!
Wonder if you could help me with something else...
I want to make the text/count of each country to be a link, to open a window, and show what members are from that country (in a list)
Any ideas on the code
Thanks again for your help! I really appreciate it! |
Edited by - mortioli on 28 April 2003 16:56:22 |
|
|
bjlt
Senior Member
1144 Posts |
Posted - 29 April 2003 : 00:47:21
|
mortioli, I'm afraid that I'm a bit busy these days. I'll come up with the codes in a day or two but that's not a promise.
|
|
|
mortioli
Average Member
United Kingdom
898 Posts |
Posted - 29 April 2003 : 16:14:39
|
No problem
Don't worry if you're busy, I appreciate the help you've already given me |
|
|
bjlt
Senior Member
1144 Posts |
Posted - 08 May 2003 : 14:37:32
|
mortioli, here's the code. fyi 1. the codes is not (strict) following the snitz practice as I did it for my site first and the original codes had little to do with snitz, the original codes works fine but this one has not been tested. If you want to use snitzlised codes I'm afraid that you have to tweak it yourself. 2. I'm afraid you need to adjust the html part yourself 3. this is a limited version that only shows contact info, which codes you can find in topic.asp, and member name, if you want to show more you can add them yourself. 4. to add more contact info besides email, such as icq, msn, you add the filed name at the end of sql string and follow the related codes in topic.asp and see M_EMAIL in my code as an example. 5. you can ask here for help if you want to add more fields but don't know how. 6. happy snitzing
well, use it this way.
make a link to it as filename.asp?country=countryname&method=0 or 1 or 2 or 3
0 = all, 1 = male 2 = female 3 = unknown you may need ChkString("countryname","urlpath") for country name in the link
new codes could be found in the later replies of this topic, old codes here are preserved for reference to see how to add new fields etc.
your header and includes here
<%
'####### Global Variables #######
Dim sCountry, iMethod
Dim iPagesize
Dim iWhichPage, iTotalPages
Dim sSortMethod
sCountry = Trim(Request("country"))
iMethod = Clng(Request("method"))
if iMethod < 0 or iMethod > 3 then iMethod = 0
iPagesize = clng(strPageSize)
'######## Start Content #########
if sCountry = "" then Response.Redirect "MemberCountByCountry.asp" : Response.End '# MemberCountByCountry.asp is a file I use to list num of users for every country. change it to the page you like.
DoListUsersByCountry
'######### End Content ##########
WriteFooter
'####### Procedures Below #######
Sub DoListUsersByCountry
Dim sSql, rs
Dim aListByCountry, iRecCount
Dim i, j
Dim mMEMBER_ID, mM_NAME, mM_LEVEL, mM_EMAIL, mM_HOMEPAGE, mM_COUNTRY, mM_RECEIVE_EMAIL
Dim MEMBER_ID, M_NAME, M_LEVEL, M_EMAIL, M_HOMEPAGE, M_COUNTRY, M_RECEIVE_EMAIL
Dim sClass
iWhichPage = GetPageNum(Trim(Request("whichpage")))
'## get user list by country/nationality
sSQL = "SELECT M.MEMBER_ID, M.M_NAME, M.M_LEVEL, M.M_EMAIL, M.M_HOMEPAGE, M.M_COUNTRY, M.M_RECEIVE_EMAIL FROM " & strMemberTablePrefix & "MEMBERS M WHERE M.M_STATUS = 1 AND M.M_COUNTRY = '" & chkString(sCountry,"SQLString") & "'"
Select Case iMethod '# I use 0/1/2/3 for sex if you use male/female/etc change it accrodingly below
Case 1
sSQL = sSQL & " AND M.M_SEX = 1" '# = 'male'
Case 2
sSQL = sSQL & " AND M.M_SEX = 2" '# = 'female'
Case 3
sSQL = sSQL & " AND M.M_SEX <> 1 AND M.M_SEX <> 2" '# M.M_SEX <> 'male' AND M.M_SEX <> 'female'
Case Else
'
End Select
Set rs = Server.CreateObject("ADODB.Recordset")
rs.cachesize = iPagesize
rs.open sSQL, my_Conn, adOpenStatic, adLockReadOnly, adCmdText
if rs.EOF or rs.BOF then '## No Users found
iRecCount = 0
Else
rs.pagesize = iPagesize
iTotalPages = cLng(rs.pagecount)
if iWhichPage > iTotalPages then iWhichPage = iTotalPages
rs.absolutepage = iWhichPage
aListByCountry = rs.GetRows(iPagesize)
iRecCount = UBound(aListByCountry,2) + 1
End If
rs.close
set rs = nothing
Response.Write "" &_
"<table border=0 width=""100%"" cellpadding=""0"" cellspacing=""0"" align=""center"">" & vbNewLine & _
" <tr>" & vbNewLine
Call DropDownPaging(1)
Response.Write "" &_
" </tr>" & vbNewLine & _
"</table>" & vbNewLine &_
"<table align=""center"" class=""TblList"">" & vbNewLine & _
" <tr>" & vbNewLine &_
" <th class=""TblHeadCellDefault"">Contact</th>" & vbNewLine & _
" <th class=""TblHeadCellDefault"">Member Name</th>" & vbNewLine &_
" </tr>" & vbNewLine
If iRecCount = 0 Then
Call WriteNoRecCells(2)
Else
mMEMBER_ID = 0
mM_NAME = 1
mM_LEVEL = 2
mM_EMAIL = 3
mM_HOMEPAGE = 4
mM_COUNTRY = 5
mM_RECEIVE_EMAIL = 6
'mM_PMRECEIVE = 7
i = 0
j = 0
For i = 0 to iRecCount - 1
MEMBER_ID = aListByCountry(mMEMBER_ID,i)
M_NAME = aListByCountry(mM_NAME,i)
M_LEVEL = aListByCountry(mM_LEVEL,i)
M_EMAIL = aListByCountry(mM_EMAIL,i)
M_HOMEPAGE = aListByCountry(mM_HOMEPAGE,i)
M_COUNTRY = aListByCountry(mM_COUNTRY,i)
M_RECEIVE_EMAIL = aListByCountry(mM_RECEIVE_EMAIL,i)
'M_PMRECEIVE = aListByCountry(mM_PMRECEIVE,i)
if j = 0 then
sClass = "TblCellDefault"
else
sClass = "TblAltCellDefault"
end if
Response.Write "" &_
" <tr>" & vbNewLine & _
" <td align=""left"" class=""" & sClass & """>put email, homepage etc codes here</td>" & vbNewLine &_
" <td align=""center"" class=""" & sClass & """><a href=""pop_profile.asp?mode=display&id=" & MEMBER_ID & """ target=""profile"">" & ChkString(M_NAME,"display") & "</a></td>" &_
" </tr>" & vbNewLine
j = j + 1
if j = 2 then j = 0
Next
End if
Response.Write "" &_
"</table>" & vbNewLine &_
"<table border=0 width=""100%"" cellpadding=""0"" cellspacing=""0"">" & vbNewLine & _
" <tr>" & vbNewLine
Call DropDownPaging(2)
Response.Write "" &_
" </tr>" & vbNewLine & _
"</table>" & vbNewLine
End Sub
sub DropDownPaging(piNum)
Dim sAlign, i
if piNum mod 2 = 0 then
sAlign = "left"
Else
sAlign = "right"
End If
if iTotalPages > 1 then
Response.Write "" &_
"<form name=""PageNum" & piNum & """ action=""ListUsersByCountry.asp"">" & vbNewLine &_
" <input name=""method"" type=""hidden"" value=""" & iMethod & """>" & vbNewLine &_
" <input name=""country"" type=""hidden"" value=""" & sCountry & """>" & vbNewLine &_
" <td align=""" & sAlign & """>" & vbNewLine
if iWhichPage > 1 then
Response.Write "" &_
" <a href=""ListUsersByCountry.asp?country=" & ChkString(sCountry,"urlpath") & "&method=" & iMethod & "&whichpage=" & iWhichPage - 1 & """>Previous Page</a>" & vbNewLine
end if
Response.Write "<b>Page</b>" & vbNewLine &_
" <select name=""whichpage"" size=""1"" onchange=""ChangePage(" & piNum & ");"">" & vbNewLine
for i = 1 to iTotalPages
Response.Write "" &_
" <option value=""" & i & """"
if i = iWhichPage then response.write "selected"
response.write "" &_
">" & i & "</option>" & vbNewLine
next
Response.Write "" &_
" </select>" & vbNewLine &_
" <b>Total: " & iTotalPages & "</b>? & vbNewLine
if iWhichPage < iTotalPages then
Response.Write "" &_
" <a href=""ListUsersByCountry.asp?country=" & ChkString(sCountry,"urlpath") & "&method=" & iMethod & "&whichpage=" & iWhichPage + 1 & """>Next Page</a>" & vbNewLine
end if
Response.Write "" &_
" </td>" & vbNewLine &_
"</form>" & vbNewLine
else
Response.Write "<td>?lt;/td>"
end if
end sub
Sub WriteNoRecCells(colspan)
Response.Write "" &_
" <tr>" & vbNewLine & _
" <td class=""TblCellDefault"" colspan=""" & colspan & """ align=""center""> No Members </td>" & vbNewLine &_
" </tr>" & vbNewLine
End Sub
Function GetPageNum(piPage)
if piPage = "" or not isnumeric(piPage) then
GetPageNum = 1
else
GetPageNum = Clng(piPage)
if GetPageNum < 1 then GetPageNum = 1
end if
End Function
%>
edit minor bug fix in blue |
Edited by - bjlt on 11 May 2003 07:49:39 |
|
|
Topic |
|
|
|