Avatar billede tzag_dk Nybegynder
02. september 2004 - 10:29 Der er 17 kommentarer og
1 løsning

SQL Sætning

Hej

Jeg har en MS SQL sætning som der skal laves om til en MySQL sætning.
Men jeg kan ikke helt finde ud af det. Er der nogen som der kan hjælpe?

strSQL =    "SELECT aRoom.RoomName, aRoom.RoomID, "&_
        "(SELECT COUNT(UserID) FROM onlineusers WHERE status = 0 AND RoomID = aRoom.RoomID) AS users "&_
        "FROM Rooms aRoom "&_
        "ORDER BY aRoom.RoomName"


På forhånd tak :o)
// Rene
Avatar billede eagleeye Praktikant
02. september 2004 - 10:36 #1
denne linje:

"FROM Rooms aRoom "&_

Skal  være:

"FROM Rooms as aRoom "&_
Avatar billede eagleeye Praktikant
02. september 2004 - 10:39 #2
Det muligt du bliver nød til at lave den om til en left join:

strSQL = "select aRoom.RoomName, aRoom.RoomID, count(UserID) as users from Rooms as aRoom left join onlineusers on aRoom.RoomID=onlineusers.RoomID where  onlineusers.status = 0 order by aRoom.RoomName"
Avatar billede tzag_dk Nybegynder
02. september 2004 - 10:42 #3
Jeg har forsøgt at bruge den sidste.
Men den komme med denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[TCX][MyODBC]Sammenblanding af GROUP kolonner (MIN(),MAX(),COUNT()...) uden GROUP kolonner er ikke tilladt, hvis der ikke er noget GROUP BY prædikat
Avatar billede ldanielsen Nybegynder
02. september 2004 - 10:56 #4
Du skal vel så bare tlføje GROUP BY aRoom.RoomName, aRoom.RoomID
Avatar billede ldanielsen Nybegynder
02. september 2004 - 10:57 #5
Den sætning du har fra MS-SQL har det der hedder en subquery, det undrer mig at MySQL ikke kan det
Avatar billede tzag_dk Nybegynder
02. september 2004 - 11:04 #6
Yes, det har jeg også lige fundet ud af :o)
Men den laver stadigvæk en fejl, den count som der er der skriver 1 hvis den tæller 0
Avatar billede eagleeye Praktikant
02. september 2004 - 11:24 #7
Ja den vil give 1 i følge dette link: http://dev.mysql.com/doc/mysql/en/Counting_rows.html

Hvad hvsi du prøver inner join i stedet for left join
Avatar billede tzag_dk Nybegynder
02. september 2004 - 11:28 #8
Det gav desværre ikke nogen forskel :(
Avatar billede eagleeye Praktikant
02. september 2004 - 11:28 #9
Nej så komemr de tomme ikke med.
Prøv med left outer join og evt skriv tabelnavnet i count også

strSQL = "select aRoom.RoomName, aRoom.RoomID, count(onlineusers.UserID) as users from Rooms as aRoom left join onlineusers on aRoom.RoomID=onlineusers.RoomID where  onlineusers.status = 0  GROUP BY aRoom.RoomName, aRoom.RoomID order by aRoom.RoomName"
Avatar billede eagleeye Praktikant
02. september 2004 - 11:29 #10
hmm jeg fik ikke rette left join til left outer join
Avatar billede tzag_dk Nybegynder
02. september 2004 - 11:33 #11
damm... Heller ikke, du kan se det her:
http://www.spotpeople.dk/chat/chat.asp?id=5
Avatar billede eagleeye Praktikant
02. september 2004 - 11:49 #12
Det lyder underlidt for count(kolonne) bør ikke tælle Null med.

Et gæt prøv at rette:  count(onlineusers.UserID) as users
til dettte:    count(DISTINCT onlineusers.UserID) as users
Avatar billede tzag_dk Nybegynder
02. september 2004 - 11:52 #13
Det er også det samme... :-(
Har lige set det her:

    set ors = p_objConn.Execute(strSQL)
    If not ors.eof Then
        arrRooms = ors.GetRows()
    End If

Kan det ikke også være at det skal laves om?
Avatar billede eagleeye Praktikant
02. september 2004 - 11:58 #14
Hvilken version af mysql bruger du?

Nej det flytter bare indholdet af recordset over i et array, det tror jeg ikke der er noget galt i. Måske hvis du har if sætning som uskriver "1" hvis countet er "".
Avatar billede tzag_dk Nybegynder
02. september 2004 - 12:01 #15
Det er version 4.0.17-nt.

Det vil jeg ikke mene at jeg har.
ChatRooms.asp:

<!-- #include virtual="/chat/classChatEngine.asp" -->
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Chat Rooms</title>
<link href="/chat/chat.css" rel="stylesheet" type="text/css">
</head>

<body topmargin="0" leftmargin="0">
<table border="0" width="100%" cellpadding="1" cellspacing="0" ID="Table1">
    <tbody id="chatRooms">
   
    <%
    Dim arrRooms
    Dim objRooms

    set conn = Server.CreateObject("ADODB.Connection")
    conn.Open "driver=MySQL;server=localhost;uid=root;pwd=mogens;database=spotpeopledk"

    Set objRooms = new GetMessages

    objRooms.Conn = conn
    arrRooms = objRooms.GetRooms()
   
    Set objRooms = nothing
   
    conn.Close
    set conn = nothing
   
    If IsArray(arrRooms) Then
        For x = 0 to ubound(arrRooms,2)
            %><tr id="room<%=arrRooms(1,x)%>">
                <td>
                    <a href="java script:parent.changeRoom(<%=arrRooms(1,x)%>);" class="roomlinks"> <%=arrRooms(0,x)%></a>&nbsp;(<%=arrRooms(2,x)%>)
                </td>
            </tr>
            <%
        Next   
    End If
   

    %>
    </tbody>
</table>

</body>

</html>
Avatar billede eagleeye Praktikant
02. september 2004 - 12:06 #16
Det forstår jeg ikke så..
Avatar billede tzag_dk Nybegynder
02. september 2004 - 12:07 #17
:o) Det gør jeg heller ikke...
Det burde virke!
Avatar billede tzag_dk Nybegynder
03. september 2004 - 11:47 #18
Hej igen...
Jeg fik ham der har lavet det, til at lave det om. Så nu virker det.
Lig et svar hvis du vil have point :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester