2017-09-20 9 views
1

Ich habe etwas ähnliches vorher gefragt, aber da ich dachte, das Problem war nicht das SQL selbst Ich orientierte meine Frage an PHP oder PDO, deshalb stelle ich diese Frage erneut (Um anzurufen es in gewisser Weise). Im Prinzip ruft meine Abfrage die Daten zweimal ab (mit Ausnahme des letzten Objekts), und ich habe versucht, den Grund herauszufinden, kann aber die Antwort nicht finden. Alle, die auf meinen anderen Beitrag geantwortet haben, hatten keine Ahnung, warum das so war. Deshalb habe ich beschlossen, diese Frage auf den SQL zu fokussieren und nicht auf den PHP-Code, sondern auf diese Entscheidung, denn bei jeder Anfrage ist auf PHPMYADMIN getestet das gleiche Duplikationsproblem erscheint, so denke ich, das Problem liegt an der SQL selbst. Danke im Voraus.Die Ergebnisse werden zweimal abgerufen SQL

Desierd Ergebnisse: Abfrage retriving die Daten (nicht zweimal)

Beispieldaten:

INSERT INTO `personal_posts` (`id`, `body`, `posted_at`, `user_id`, `likes`, `postimg`, `topics`) VALUES 
(1, 'post 1', '2017-01-27 00:00:00', 3, 1, NULL, NULL), 
(2, 'post 2, '2017-09-10 00:00:00', 1, 1, NULL, NULL), 

Meine Frage:

SELECT personal_posts.id, personal_posts.body, personal_posts.posted_at, personal_posts.postimg, personal_posts.likes, users.`username` FROM users, personal_posts, followers 
      WHERE (personal_posts.user_id = followers.user_id 
      OR personal_posts.user_id = :useridB) 
      AND users.id = personal_posts.user_id 
      AND follower_id = :userid 
      ORDER BY personal_posts.posted_at DESC; 
+1

Bearbeiten Sie Ihre Frage und liefern Sie Beispieldaten und gewünschte Ergebnisse. –

+0

Ich habe hinzugefügt, was Sie angefordert @GordonLinoff – Itsmoloco

+0

Nein, haben Sie nicht. Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql-query – Strawberry

Antwort

0

Nie Kommas in der FROM Klausel. Immer verwenden Sie die richtige, explizite JOIN Syntax. Was erwarten Sie, wenn Sie die Datenbank bitten, zunächst ein kartesisches Produkt aller Tabellen zu erstellen? Duplikate scheinen wahrscheinlich.

Vielleicht ist dies die Abfrage, die Sie wollen:

SELECT pp.id, pp.body, pp.posted_at, pp.postimg, pp.likes, u.username 
FROM personal_posts pp JOIN 
    users u 
    ON pp.user_id = u.id JOIN 
    followers f 
    ON pp.user_id = f.user_id 
WHERE f.follower_id = :userid OR pp.user_id = :useridB 
ORDER BY pp.posted_at DESC; 

Dies ist nur eine Vermutung, aber. Es ist zumindest lesbar.

+0

Danke für den Versuch, trotzdem habe ich die gleichen Ergebnisse. – Itsmoloco

0

Wenn ich doppelte Datensätze erhalte, füge ich manchmal alle Spalten aus allen Tabellen hinzu, um zu sehen, wo sich die Duplikate befinden. So können Sie eine Abfrage wie folgt versuchen (basierend auf Gordon Linoff Antwort):

SELECT 'pp', 
pp.*, 
'u', 
u.*, 
'f', 
f.* 
FROM personal_posts pp 
JOIN users u ON pp.user_id = u.id 
JOIN followers f ON pp.user_id = f.user_id 
WHERE f.follower_id = :userid OR pp.user_id = :useridB 
ORDER BY pp.posted_at DESC; 

(ich die ‚pp‘ und anderen Bereichen in Anführungszeichen hinzugefügt haben, so dass Sie in Ihre Ergebnisse sehen können, wo ein Tisch endet und eine andere Tabelle beginnt.)

Sie sollten Ergebnisse mit vielen Spalten erhalten, aber es sollte Ihnen zeigen, wo die Datensätze unterschiedlich sind. Dies würde auf eine fehlende Join-Bedingung oder WHERE-Klausel hinweisen.

Dies ist nicht die letzte Abfrage, aber es kann Ihnen helfen, das Problem zu finden.

+0

Danke für Ihre Hilfe, ich bin neu in SQL, es gibt zwei Unterschiede zwischen den duplizierten Ergebnissen, der ID und der Follower_ID (wie im folgenden Bild gezeigt https://ibb.co/kLtg9Q) Also, was könnte schief gehen ? – Itsmoloco

Verwandte Themen