2017-09-19 1 views
-1

Ich habe Probleme mit meiner Abfrage, es ruft alle Objekte zweimal ab (außer der letzten) Ich habe die letzten zwei Tage damit verbracht, es ohne Ergebnis zu sortieren, also ich dachte, dass ich hier fragen könnte. Danke im Voraus.Meine Anfrage rekurriert die Daten zweimal

PS:

ich Fortschritte gemacht habe, kommt der Fehler aus der Abfrage, wenn ich es auf PHPMYADMIN ausführen die Daten zweimal abgerufen wird. (So ​​kann jemand einen Fehler in der Abfrage finden)

$token = *** 

$userid = *** 

$followingposts = $db->query(' 
    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 = :userid 
    ) 
    AND users.id = personal_posts.user_id 
    AND follower_id = :userid 
    ORDER BY personal_posts.posted_at DESC; 
    ', array(':userid'=>$userid), array(':userid'=>$userid)); 
$response = "["; 
foreach($followingposts as $post) { 
    $response .= "{"; 
    $response .= '"PostId": '.$post['id'].','; 
    $response .= '"PostBody": "'.$post['body'].'",'; 
    $response .= '"PostedBy": "'.$post['username'].'",'; 
    $response .= '"PostedAt": "'.$post['posted_at'].'",'; 
    $response .= '"PostImage": "'.$post['postimg'].'",'; 
    $response .= '"Likes": '.$post['likes'].''; 
    $response .= "},"; 
} 
$response = substr($response, 0, strlen($response)-1); 
$response .= "]"; 
http_response_code(200); 
echo $response; 

    class DB { 
     private $pdo; 
     public function __construct() { 
       $pdo = new PDO('****'); 
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       $this->pdo = $pdo; 
     } 
     public function query($query, $params = array()) { 
       $statement = $this->pdo->prepare($query); 
       $statement->execute($params); 
       if (explode(' ', $query)[0] == 'SELECT') { 
       $data = $statement->fetchAll(PDO::FETCH_ASSOC); 
       return $data; 
       } 
     } 
} 
+6

** niemals Ihre eigene JSON rollen **. Siehe ['json_encode()'] (http://php.net/manual/function.json-encode.php) – Phil

+1

Ihre Argumente zu '$ db-> query()' sind falsch, das zweite Argument sollte nicht sein 'array (': userid' => $ userid)'. –

+0

Welchen Treiber benutzen Sie? – chris85

Antwort

0

(Partial Antwort am besten.)

beitreten ANSI-Syntax bewegt Prädikate aus der where-Klausel und legt sie näher an die Tabellenverweise verbinden. Dies wurde in SQL-Abfragen seit über 20 Jahren als Best Practice angesehen. Es ist an der Zeit, keine Kommas mehr in der from-Klausel zu verwenden und explizit zu erläutern, wie die Tabellen zusammenkommen. Z.B.

SELECT 
    personal_posts.id, 
    personal_posts.body, 
    personal_posts.posted_at, 
    personal_posts.postimg, 
    personal_posts.likes, 
    users.`username` 
FROM users 
INNER JOIN personal_posts ON users.id = personal_posts.user_id 
LEFT OUTER JOIN followers ON personal_posts.user_id = followers.user_id 
WHERE personal_posts.user_id = :userid 
ORDER BY personal_posts.posted_at DESC; 

Hinweis Ich bin nicht sicher, ob die obige Abfrage ist ein exakter Ersatz

+0

Es hat nicht funktioniert. (PS, es ist gültig (Mit valide meine ich, dass die Anfrage ausgeführt wird, aber trotzdem funktioniert das Problem nicht) auf PHPMYADMIN, aber auf php gibt es mir ein ungültiges Argument für foreach() in *****) – Itsmoloco

+0

danke , nur zur Anzeige der Joinsyntax gedacht –

Verwandte Themen