2009-06-23 2 views
0

Hier ist die Situation, jede Seite wird 30 Themen zeigen, so dass ich zumindest 1 SQL-Anweisungen ausführen musste, außerdem möchte ich zeigen, wie viele Relpies mit jedem Thema und wer der Autor ist, also Ich muss 30 Anweisungen verwenden, um die Anzahl der replpies zu zählen und andere 30 Anweisungen zu verwenden, um den Autor zu finden. Schließlich habe ich 61 Aussagen, ich mache mir wirklich Sorgen über die Effizienz.Was ist der beste Weg, um SQL-Abfragen in meiner Situation zu reduzieren

Meine Tabellen sieht wie folgt aus:

 
Topic   Reply   User 
-------  ----------  ------------ 
id   id    id 
title   topic_id   username 
...   ...    
author_id 

Antwort

2

Sie in Verbindungstabellen während einer Abfrage aussehen sollte.

Als Beispiel könnte ich Folgendes tun:

SELECT reply.id, reply.authorid, reply.text, reply.topicid, 
     topic.title, 
     user.username 
FROM reply 
    LEFT JOIN topic ON (topic.id = reply.topicid) 
    LEFT JOIN user ON (user.id = reply.authorid) 
WHERE (reply.isactive = 1) 
ORDER BY reply.postdate DESC 
LIMIT 10 
2

Wenn ich Ihre Anforderungen richtig gelesen, Sie das wollen Ergebnis der folgenden Abfrage:

SELECT Topic.title, User.username, COUNT(Reply.topic_id) Replies 
FROM Topic, User, Reply 
WHERE Topic.id = Reply.topic_id 
AND Topic.author_id = User.id 
GROUP BY Topic.title, User.username 
+0

+1 schlagen Sie mich dazu. –

0

Sie können sicherlich einige "linke Verknüpfungen" verwenden, da sich die Ausgabe jedoch nur ändert, wenn jemand Ihre Tabellen aktualisiert/hinzufügt, könnten Sie versuchen, sie in einer XML/Textdatei zwischenzuspeichern. Ein anderer Weg könnte darin bestehen, Redundanz zu schaffen, indem man der Thementabelle eine weitere Zeile hinzufügt, die die Antwortzählung, den Benutzernamen usw. enthält und sie nur aktualisiert, wenn Änderungen auftreten ...

1

Als ich mit der Datenbank anfing getriebene Webanwendungen hatte ich ähnliche Probleme. Ich habe dann mehrere Jahre in einer datenbankreichen Umgebung gearbeitet, in der ich SQL gelernt habe. Wenn Sie beabsichtigen, Web-Anwendungen weiter zu entwickeln (was meiner Meinung nach sehr viel Spaß macht), wäre es Ihre Zeit wert, ein Buch zu lesen oder einige Anleitungen zur grundlegenden und fortgeschrittenen SQL zu lesen.

1

Eine Sache hinzufügen, oben auf

JOINS

Es kann sein, dass Ihre Gruppen von Daten passen oder beziehen sich nicht, so JOIN wird nicht funktionieren. Eine andere Möglichkeit: Sie haben möglicherweise zwei Hauptdatenblöcke, die schwierig zu verknüpfen sind.

Gespeicherte Prozeduren können mehrere Ergebnismengen zurückgeben.

Beispielsweise könnten Sie für eine Zusammenfassungsseite in einem einzigen SQL-Aufruf eine zusammengefasste Ergebnismenge und eine weitere Ergebnisgruppe "Letzte 20" zurückgeben. JOIN der 2 ist peinlich, weil es nicht zusammenpasst.

Verwandte Themen