2016-08-04 3 views
2

Ich habe einen MySQL, PHP-Code wie folgt.So entfernen Sie Duplikate von JSON in PHP

$sql = "SELECT * FROM shipschedule WHERE ship_date BETWEEN '2016-08-01' AND '2016-8-31'"; 
$result = $mysqli->query($sql); 
$e = array(); 

while($r = $result->fetch_array()) { 
    $rows = array(); 
    $rows['title'] = $r['title']; 
    $rows['start'] = $r['ship_date']; 
    array_push($e, $rows); 
} 
echo json_encode($e); 

Der obige PHP-Code echo

[{"title":"111","start":"2016-08-10"}, 
{"title":"111","start":"2016-08-10"}, 
{"title":"111","start":"2016-08-10"}, 
{"title":"222","start":"2016-08-17"}, 
{"title":"222","start":"2016-08-17"}, 
{"title":"222","start":"2016-08-16"}] 

Meine Frage ist, wie ich stattdessen die wie oben folgt Echo kann. Bitte beachten Sie, dass doppelte Startdaten nach Titel entfernt werden.

[{"title":"111","start":"2016-08-10"}, 
{"title":"222","start":"2016-08-17"}, 
{"title":"222","start":"2016-08-16"}] 

Titel 111 hat die gleichen drei Startdaten, und ich brauche, um es anzuzeigen, wie

{"title":"111","start":"2016-08-10"}, 

Titel 222 hat die gleichen zwei Startdaten, und ich brauche, um es anzuzeigen, wie

{"title":"222","start":"2016-08-17"}, 
{"title":"222","start":"2016-08-16"}] 
+1

'DISTINCT' SELECT - wird die doppelten Ergebnisse aus der Abfrage Rückkehr entfernen. – ArtisticPhoenix

+3

warum es in PHP? du machst eine Abfrage. lassen Sie die Abfrage Dubletten vermeiden, so dass Sie keine Zeit damit verschwenden, Daten nur in php wieder zu löschen. –

+0

Sie haben Recht. Irgendwie habe ich PHP konzentriert und mysql übersehen. – librium

Antwort

2

Sie verhindern können Duplikate zu empfangen und reduzieren unnötige Daten anfordern, indem Sie Ihre Abfrage anpassen.

SELECT DISTINCT title, start FROM ...

+0

Vielen Dank für die schnelle Antwort. Es klappt. – librium

2

Es wäre viel einfacher (und wahrscheinlich auch schneller), nur die richtigen (einzigartigen) Daten von MySQL zu bekommen. Dies kann mit dem distinct Modifikator erreicht werden:

SELECT DISTINCT title, start 
FROM shipschedule 
WHERE ship_date BETWEEN '2016-08-01' AND '2016-8-31' 
+0

Danke. Das funktioniert auch gut. – librium