2009-08-18 3 views
2

Ich bin auf Facebook Facebook Art Anfrage Seite für ein Projekt. Ich bin mit Gruppierungsanfragen in allen gedruckten Seiten fest.gruppe by klause hilfe

meine SQL als

SQL = "SELECT R.REQUESTID, R.BYID, R.TOID, R.TYPE, R.DATEENTERED, M.MEMBERID, M.FIRSTNAME, M.LASTNAME" 
SQL = SQL & " FROM REQUESTS R, MEMBERS M" 
SQL = SQL & " WHERE R.ACTIVE = 1 AND R.TOID = "& Session("MEMBERID") &" AND R.BYID = M.MEMBERID" 
SQL = SQL & " GROUP BY R.REQUESTID, R.BYID, R.TOID, R.TYPE, R.DATEENTERED, M.MEMBERID, M.FIRSTNAME, M.LASTNAME" 
SQL = SQL & " ORDER BY R.DATEENTERED DESC" 

mich Gibt Ergebnisse als
Freund
Edie
Freund
Frank
Gruppe
George

Aber ich brauche es als

Freund
Edie
Frank
Gruppe
George

+3

Mann, bitte gehen Sie diese Fragen zu überprüfen http://StackOverflow.com/search?q=provozieren+SQL+Injection –

+1

SQL-Injection gilt hier nicht, es sei denn, un-sanitized Benutzerdaten ist in der Sitzungsvariablen MEMBERID. Davon haben Sie keine Informationen. – Kieveli

+0

+1 zu Zähler -1. Sicher ist es dynamische SQL, aber es scheint kein Risiko für SQL-Injektion in diesem Code-Snippet zu sein. Es gibt keine vom Benutzer eingegebenen Daten, nur eine Sitzungsvariable, bei der es sich wahrscheinlich um eine abgerufene pkey-Kennung aus einem Login handelt. –

Antwort

0

Wenn es mehr als eine ANFRAGE für einen der MITGLIEDER gibt, die Sie suchen, erhalten Sie Dubletten.

Blick auf diese:

SELECT --select all columns required, can produce duplicates 
    R.REQUESTID, R.BYID, R.TOID, R.TYPE, R.DATEENTERED, M.MEMBERID, M.FIRSTNAME, M.LASTNAME 
    FROM REQUESTS   R 
     INNER JOIN MEMBERS M ON R.BYID = M.MEMBERID 
    WHERE M.MEMBERID IN (SELECT --get distinct list of members to display 
          M.MEMBERID 
          FROM REQUESTS   R 
           INNER JOIN MEMBERS M ON R.BYID = M.MEMBERID 
          WHERE R.ACTIVE = 1 AND R.TOID = ___MEMBERID__ 
          GROUP BY M.MEMBERID 
         ) 
    ORDER BY R.DATEENTERED DESC 
+0

Ich denke, ich werde mitmachen müssen, aber ich denke, ich werde wieder Tabelle mit Anfragen anfordern. – Efe

+0

die abgeleitete Tabelle erhält eine eindeutige Liste von Mitgliedern, ich schließe mich dann an die Anfragen in einem Versuch, die anderen Spalten zu bekommen, die Sie anzeigen möchten, die Duplikate einführen. Beschränken Sie Ihre Ergebnisspalten nur auf das, was Sie benötigen. Wenn Sie alle diese Spalten benötigen, müssen Sie mit den Duplikaten leben. –

0

Gruppierung nach wird Sie eindeutige Werte für die Spalte durch die Ihre Gruppierung geben.

Warum möchten Sie die Friend-Zeile zweimal aufgelistet?

+0

Das ist die Sache. Ich will es nicht zweimal aufgeführt, aber derzeit ist es. – Efe

0

Es gibt eine Reihe von Feldern in Ihrer SELECT und GROUP BY-Klauseln, die von den Namen, wie entweder Primärschlüsselwerte klingen wie MemberID oder Felder wahrscheinlich sehr sein B. DATEENTERED (Letzteres enthält wahrscheinlich auch Zeitinformationen.) Jedes dieser Felder kann verhindern, dass Ihre Abfrage überhaupt eine Gruppierung durchführt. Ich würde versuchen, einige dieser Elemente zu entfernen, bis Ihre Gruppierung wirksam wird. Auf diese Weise können Sie isolieren, welche Felder problematisch sind. Oder: Behalten Sie einige Felder wie Vor- und Nachname und fügen Sie dann hinzu, um zu sehen, wo die GROUP BY auseinander fällt.

0

Ich habe gerade eine DISTINCT oben auf der Abfrage hinzugefügt. Ich schätze, das würde lösen, wenn ich es richtig verstanden habe.

sql = "distinct R.REQUESTID SELECT, R.BYID, R.TOID, R.TYPE, R.DATEENTERED, M.MEMBERID, M.FIRSTNAME, M.LASTNAME"

SQL = SQL & " aus Anforderungen R, M MEMBERS“

SQL = SQL & "WHERE R.ACTIVE = 1 und R.TOID =" & Session ("MemberID") & "AND R.BYID = M.MEMBERID"

SQL = SQL & "GROUP BY R.REQUESTID, R.BYID, R.TOID, R.TYPE, R.DATEENTERED, M.MEMBERID, M.FIRSTNAME, M.LA StName“

SQL = SQL & "ORDER BY R.DATEENTERED DESC"

Versuchen Sie dies, wenn Werke der Nutzer

+1

Ich habe es eindeutig versucht, es wird nicht funktionieren. – Efe

2

Versuchen Sie, es in eine eindeutige Auswahl zu ändern.Ich denke, diese Anbieter spezifisch ist, aber in der Regel

SQL = "SELECT DISTINCT R.REQUESTID, R.BYID, R.TOID, R.TYPE, R.DATEENTERED, M.MEMBERID, M.FIRSTNAME, M.LASTNAME" 

oder

SQL = "SELECT DISTINCT ROW R.REQUESTID, R.BYID, R.TOID, R.TYPE, R.DATEENTERED, M.MEMBERID, M.FIRSTNAME, M.LASTNAME" 

den Trick.

+0

Wenn mehrere REQUESTS-Zeilen pro MEMBERS vorhanden sind, ist es sehr unwahrscheinlich, dass ein distinct die Duplikate entfernt. Wenn REQUESTS.DATEENTERED different ist oder REQUESTS.REQUESTID eine eindeutige ID ist, dann gibt es keine Möglichkeit, dass ein eindeutiger Wille funktioniert. –

+0

es ist erstaunlich, diese Antwort ist völlig falsch, aber es hat 20 Punkte, während meine richtige (und ausgewählte) Antwort nur 15 bekam! –

+0

Mein Avatar enthält einen hypnotischen Vorschlag. ;) – Kieveli

Verwandte Themen