"subquery returns more than 1 row" - Fehler.
Ich bin neu in web-Programmierung, und ich bin versucht, ein twitter-Klon. An diesem Punkt, ich habe 3 Tabellen:
Benutzer (id, name)
- id die automatisch generierte id
- Namen des Benutzers
tweets (id, Inhalt, user_id)
- id die automatisch generierte id
- Inhalt ist der text des Tweets
- user_id die id des Benutzers, der die post
Anhänger (id, user_id, following_id)
- id die automatisch generierte id
- user_id ist die user-wer ist dabei folgende
- following_id ist der Benutzer, der gefolgt wird
So, wird neu in sql als auch, ich versuche das erstellen einer SQL-Anweisung zurückgeben würde die tweets, die derzeit angemeldeten Benutzer und jeder, dem er folgt.
Ich habe versucht, zu verwenden diese Anweisung, und das funktioniert auch manchmal, aber andere Male, bekomme ich eine Fehlermeldung, die sagt: "Subquery returns more than 1 row". Hier ist die Aussage:
SELECT * FROM tweets
WHERE user_id IN
((SELECT following_id FROM followers
WHERE user_id = 1),1) ORDER BY date DESC
- Ich setzen Sie 1 hier als Beispiel, das wäre die id des aktuell angemeldeten Benutzers.
Ich habe nicht hatte kein Glück mit dieser Erklärung; jede Hilfe wäre sehr geschätzt werden! Danke.
vielen Dank, das ist definitiv eine gute Praxis zu Holen!
InformationsquelleAutor kurisukun | 2011-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
sub-queries generell als ineffizient und nicht empfohlen, aber als ich sah, dass Sie immer noch lernen, sql Ihr bestes, um die Dinge so einfach, kurz und lesbar wie möglich. Ich wollte nicht den code ändern zu viel. Wie Dems sagt, es gibt viele Wege, das gleiche zu tun, in sql, Sie alle haben Ihre vor-und Nachteile.
InformationsquelleAutor Daniel Brink
In einem Kommentar fragst du
is it generally better to use a subquery or a union
. Leider gibt es keine einfache Antwort, nur ein paar Informationen.Einige Sorten von SQL Probleme haben, die für die Optimierung der IN-Klausel, wenn die lsit ist groß, und möglicherweise eine bessere Leistung in einer der folgenden Möglichkeiten...
... Oder
... Oder
Gibt es viele, viele alternativen...
Einige Sorten von SQL-Kampf zu optimieren
OR
Zustand, und am Ende die überprüfung jeder Datensatz in den tweets Tabelle anstelle der Nutzung eines INDEX. Dies würde die UNION die option vorzuziehen, da jede Hälfte der Abfrage wird dann profitieren Sie von einem index auf das Feld user_id.Aber KANN man eigentlich diese Ecke umgestalten Fall aus deinem code ganz : Machen Sie jeden Benutzer ein Nachfolger von sich selbst. Das würde dann aber bedeuten, dass sich die tweets für die follower würde natürlich die Anwender selbst. Ob dies sinnvoll ist in allen Fällen abhängig von Ihrem design und weitere funktionelle Anforderungen.
Kurz gesagt, ist Ihre beste Wette, um einige repräsentative Daten und testen Sie die Optionen. Aber ich würde nicht wirklich sorgen über es für jetzt. Wie lange Sie die Kapseln dieser code in einem Ort, können Sie nur eine auswählen, die Sie am bequemsten mit. Dann, wenn Sie den rest des Systems knobelte, und du bist viel mehr zuversichtlich, dass sich die Dinge nicht ändern, Sie können gehen Sie zurück und optimieren wenn nötig.
vielen Dank, das ist sehr informativ!
InformationsquelleAutor MatBailie
versuchen, diese
sind, selbst wenn Sie haben keine Anhänger für Ihre Benutzer
Gibt es auch eine Lösung mit joins, aber eigentlich bin ich in Eile. Werde versuchen zu schreiben die Abfrage, sobald ich die Zeit habe. Einige andere werden wohl Antworten. Sorry.
InformationsquelleAutor BigMike