webForumDet fria alternativet

Slå ihop

14 svar · 480 visningar · startad av Asa

AsaMedlem sedan dec. 20011 934 inlägg
#1

Har 3 sql strängar. EN som hämtar data och två som räknar olika fält i databasen. Vill nu slå ihop dessa 3 till 1 om det går. All data är ifrån samma tabell. Någon som kan?

[b]SQL1[/b]
Set RS = Conn.Execute("Select * From users Order By anvnamn")

[b]SQL2[/b]
Set Antal=Conn.Execute("Select Count(*) as antal From users Where sponsor='" & RS("anvnamn") & "'") 

[b]SQL3[/b]
Set Antal2=Conn.Execute("Select Count(*) as antal2 From users Where sponsor='" & RS("anvnamn") & "' and vip=1")
AsaMedlem sedan dec. 20011 934 inlägg
#2

Har testat detta men det blir fel hela tiden. Är MYSQL jag har som databas! Ni kanske vet varför det blir felet:
Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax near 'select count(*) from users B Where B.sponsor=U.anvnamn) as Spo1,(select c' at line 1

SQL = "SELECT U.ar,U.man,U.dag,U.userid,U.anvnamn,U.status,U.kon,(select count(*) from users B Where B.sponsor=U.anvnamn) as Spo1,
(select count(*) from users C Where C.sponsor=U.anvnamn and vip=1) as Spo2 FROM users U Group By spo1 
ORDER BY 8 DESC"
LarsGMedlem sedan dec. 200012 465 inlägg
#3

Den typen av frågor stöds inte av Mysql. Även om det gick så skulle jag ändå rekommendera att göra det som två frågor. Den första som den är nu. Frågorna med count kan man slå ihop till en

Select Count(*) as antal,
sum(case when vip = 1 then 1 else 0 end) as vip
 From users 
Where sponsor='" & RS("anvnamn") & "'"
AsaMedlem sedan dec. 20011 934 inlägg
#4

Okej, tackar så mycket!

AsaMedlem sedan dec. 20011 934 inlägg
#5

Grejjer är ju så att jag har sidnavigering på allt och sen ska bara de personer visas som har sponsrat någon. FÖrstår du. SOm det är nu kan man ju köra en if antal > 0 men då blire ju fel med sidnavigeringen!

AsaMedlem sedan dec. 20011 934 inlägg
#6

Åhh, var ju bara att lägga y=y+1 innanför ifsatsen. Haha

AsaMedlem sedan dec. 20011 934 inlägg
#7

Funkade visst inte med det jag gjorde. Man är på sida 1 i postväg hela tiden fast man byter sida!
Koden för sidan:

<%Set RS = Server.CreateObject("ADODB.Recordset")

Sidan = Request.QueryString("sida")
If Sidan = "" then 
  sida = 1 
Else 
  sida = Sidan 
End If 

RS.CursorLocation = 3
RS.CacheSize = PSUSERS

SQL = "Select * From users Order By anvnamn"
RS.Open SQL, Conn%>

<table width="100%" border="0" cellspacing="0" cellpadding="2">
  <tr>
    <td valign="top" style="border-bottom: 1px solid <%=LINJE%>"><font size="2"><b>Alla rekryteringar</b></font></td>
  </tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2" align="center">
<%If RS.EOF Then%>
  <tr>
    <td colspan="3">Ingen har rekryterat!</td>
  </tr>
<%Else%>
  <tr bgcolor="<%=BG%>">
    <td width="50%"><b>Namn</b></td>
    <td width="15%" align="center"><b>Rekryterat</b></td>
    <td width="20%" align="center"><b>Rekryt m VIP</b></td>
    <td width="15%" align="center"><b>Ratio</b></td>
  </tr>
<%RS.MoveFirst 
RS.PageSize = PSUSERS
RS.AbsolutePage = sida

Sidor =  RS.PageCount
Y = 0 
Do While Not RS.EOF And Y < RS.PageSize
If y Mod 2 = 0 then 
   color = "#F2F2F2" 
Else 
  color = "" 
End If
birthdate= CDate(RS("ar")&"-"&RS("man")&"-"&RS("dag"))
Set Antal=Conn.Execute("Select Count(*) as antal From users Where sponsor='" & RS("anvnamn") & "'")
If Antal("antal") > 0 Then
  Dim Antal2
  Set Antal2=Conn.Execute("Select Count(*) as antal2 From users Where sponsor='" & RS("anvnamn") & "' and vip=1")%>
    <tr height="24">
      <td bgcolor="<%=color%>" style="border-bottom: 1px solid #cccccc"><a href="rekryt.asp?id=<%=RS("userid")%>"><b>VISA</b></a> | <b><%If RS("status") = "1" Then%><img src="gfx/online.gif" alt="Online"><%Else%><img src="gfx/offline.gif" alt="Offline"><%End If%> <a href="chippin.asp?id=<%=RS("userid")%>"><%=Server.HTMLEncode(RS("anvnamn"))%></a></b>&nbsp;<%If RS("kon") = 1 Then%>F<%Else%>P<%End If%><%=Birth(birthdate)%></td>
      <td bgcolor="<%=color%>" style="border-bottom: 1px solid #cccccc" align="center"><%=Antal("antal")%> st</td>
      <td bgcolor="<%=color%>" style="border-bottom: 1px solid #cccccc" align="center"><%=Antal2("antal2")%> st</td>
      <td bgcolor="<%=color%>" style="border-bottom: 1px solid #cccccc" align="center"><%=Round((Antal2("antal2")/Antal("antal")) * 100,0)%> % är VIP</td>
    </tr>
  <%Antal2.Close
  Set Antal2=Nothing
y=y+1
End If
Antal.Close
Set Antal=Nothing
RS.MoveNext
Loop
If Sidor > 1 Then%>
  <tr>
    <td width="50%">
      <%If (Int(sida)) <> 1 Then%>
        <a href="rekrytering.asp?sida=<%=(Int(sida)-1)%>"><< <b>Bakåt</b></a>
      <%Else%>
        &nbsp;
      <%End If%>
    </td>
    <td width="50%" colspan="3" align="right">
      <%If (Int(sida)) <> (Int(Sidor)) Then%>
        <a href="rekrytering.asp?sida=<%=(Int(sida)+1)%>"><b>Framåt</b> >></a>
      <%Else%>
        &nbsp;
      <%End If%>
    </td>
  </tr>
<%End If
End If%>
</table>
<%RS.Close
Set RS=Nothing%>
AsaMedlem sedan dec. 20011 934 inlägg
#8

Ingne som kan hjälpa mig?

J.N.Medlem sedan apr. 20031 660 inlägg
#9

HEJ!

Det är alltså Sidan = Request.QueryString("sida") som är fel som jag tolkar det, du får alltid =1, dvs sida är tom.

Då är det endast att gräva ned sig i koden, i detta fall själva adressen.
- vad står det i adressfältet, sida=?
- om du ändrar sida manuellt, blir det rätt då

AsaMedlem sedan dec. 20011 934 inlägg
#10

Nää det är inte det. Grejjen är att alla fält i databasen räknas och splittas upp på olika sidor som det är men nu är det så att jag har en ifsats i loopen där de som har mer än 0 visas och då blir det ju helt fel med sidorna. Man ska ju bara räkna ihop de medlemmar som värvat folk. Har mer än 0 i antal.

AsaMedlem sedan dec. 20011 934 inlägg
#11

Vill även sortera efter antal i första SQL strängen. Nu kommer de huller om buller.

LarsGMedlem sedan dec. 200012 465 inlägg
#12

Nu vet jag inte hur den select-satsen ser ut men för att sortera med avseende på värdet av en count så kan man göra

select count(*) as x from t order by x desc
AsaMedlem sedan dec. 20011 934 inlägg
#13

SQL1:
Select * From users Order By anvnamn

SQL2:
Select Count(*) as antal, sum(case when vip = 1 then 1 else 0 end) as vip From users Where sponsor='" & RS("anvnamn") & "'

Jag vill i SQL1 kunna sortera efter den med mest sponsrade men det går kaske ej för den sqlen kommer efter och går ej att bygga in i den första? För jag vill ju ha den som sponsrat flest längst upp och mins längst ner.

AsaMedlem sedan dec. 20011 934 inlägg
#14

Kan man kanske göra på något annat sätt då? Nån som har tips? Man ser just nu alla medlemmar. Även de som inte rekryterat någon och det vill jag inte.

AsaMedlem sedan dec. 20011 934 inlägg
#15

Ingen som vet eller kan ge sig på denna?

Genererad på 391 ms · cache AV · v20260730165559-full.f96bc7eb