MySQL - SELECT alle Spalten WHERE eine Spalte ist DISTINCT
Ich bin sehr Leid, wenn die Frage scheint zu einfach.
Ich habe gesurft gesamte Internet und StackOverflow für eine fertige Lösung und nichts gefunden, ich kann verstehen, und kann nicht schreiben Sie es mir, so zu Fragen, es hier.
Ich habe eine MySQL-Datenbank.
Es hat eine Tabelle mit dem Namen "gepostet".
Es hat 8 Spalten.
Ich ausgeben muss dieses Ergebnis:
SELECT DISTINCT link FROM posted WHERE ad='$key' ORDER BY day, month
Aber ich brauche nicht nur den "link" - Spalte, aber auch die anderen Spalten für diese Zeile.
Wie für jede Zeile zurück, die mit dieser Abfrage, die ich auch brauche, um zu wissen, die "id" in der Tabelle "Tag" und "Monat" - Werte etc.
Bitte sagen Sie mir, was soll ich Lesen, oder, wie Sie es machen.
Bitte halten Sie es so einfach wie möglich, ich bin kein Experte in MySQL.
Bearbeiten:
Ich versuchte dies:
SELECT DISTINCT link,id,day,month FROM posted WHERE ad='$key' ORDER BY day, month
Funktioniert es nicht. Es gibt zu viele Zeilen. Sagen, es gibt 10 Zeilen mit den gleichen links, aber unterschiedliche Tag/Monat/id. Dieses Skript gibt alle 10, und ich möchte nur die erste (für diesen link).
VERSCHIEDENE link
, der Wert anderer Spalten sind vage. Sie können nicht nur wählen Sie die anderen Spalten. Können Sie erklären, ein wenig mehr? InformationsquelleAutor der Frage John Smith | 2012-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem kommt von instinktiv zu glauben, dass
DISTINCT
ist eine lokale pre-modifier für eine Spalte.Daher, Sie "sollte" in der Lage sein zu geben
XXbadXX SELECT col1, DISTINCT col2 FROM mytable XXbadXX
haben und es wieder eindeutige Werte für
col
2. Leider nicht.DISTINCT
ist eigentlich eine Globale post-modifier fürSELECT
ist, dass-im Gegensatz zuSELECT ALL
(Rückgabe aller Antworten) ist esSELECT DISTINCT
(gibt alle eindeutigen Antworten). So eine einzelneDISTINCT
wirkt auf ALLE Spalten, die Sie ihm geben.Dies macht es wirklich schwer zu bedienen
DISTINCT
auf eine einzige Spalte, während sich die anderen Spalten, ohne dabei große extrem hässlich backflips.Die richtige Antwort ist die Verwendung eine
GROUP BY
auf die Spalten, die Sie wollen, um eindeutige Antworten:SELECT col1, col2 FROM mytable GROUP BY col2
geben Sie beliebige eindeutigecol2
Zeilen, die mit Ihrercol1
Daten sowie.InformationsquelleAutor der Antwort DragonLord
Was Sie fordern, ist nicht sinnvoll.
Entweder Sie wollen die unterschiedlichen Werte aller
link, id, day, month
oder Sie brauchen, um zu finden, ein Kriterium zu wählen, welche die Werte vonid, day, month
Sie verwenden möchten, wenn Sie nur wollen, höchstens einen einzelnen Wert vonlink
.Sonst, was Sie nach ist ähnlich MySQL ist versteckte Spalten in
GROUP BY
/- Anweisungen, die nicht-standard-SQL, und tatsächlich sein kann ziemlich verwirrend.
Könnte man in der Tat verwenden eine
GROUP BY link
wenn es sinnvoller ist, wählen Sie jede Zeile für eine bestimmtelink
Wert.Alternativ können Sie eine sub-select wählen Sie die Zeile mit der minimalen
id
für jedelink
Wert (wie beschrieben in diese Antwort):InformationsquelleAutor der Antwort Bruno
Wenn das, was Ihre Frage ist, um nur Zeilen anzeigen, die haben 1 link für Sie, dann können Sie die folgenden verwenden:
Wieder ist dies, vorausgesetzt, dass Sie möchten, schneiden Sie alles, was einen doppelten link.
InformationsquelleAutor der Antwort Joe Meyer
ODER
InformationsquelleAutor der Antwort mlishn
Wenn Sie möchten, dass alle Spalten, in denen link einzigartig ist:
InformationsquelleAutor der Antwort Zonata
InformationsquelleAutor der Antwort Sinaesthetic
Ich denke, die beste Lösung wäre eine Unterabfrage, und fügen Sie, dass in der Tabelle. Der sub-query zurückgeben würde, die den primären Schlüssel der Tabelle. Hier ist ein Beispiel:
Was dieser tut, ist die row_number-Funktion stellt eine numerische Sequenz zu partitionieren, indem Sie jeden einzelnen link, dass die Ergebnisse in der Abfrage.
Indem Sie nur diejenigen row_numbers, dass = 1, dann hast du nur return 1 Zeile für jeden link.
Den Weg, Sie zu ändern, was link wird mit "1" gekennzeichnet ist, die durch die order-by-Klausel in der row_number-Funktion.
Hoffe, das hilft.
InformationsquelleAutor der Antwort Walker Farrow
InformationsquelleAutor der Antwort arunmoezhi
Was Sie wollen, ist die folgende:
wenn es 4 Zeilen für Beispiel, in dem link ist die gleiche, es holt nur ein (ich davon ausgehen das erste).
InformationsquelleAutor der Antwort Failon
Ich hatte ein ähnliches problem, vielleicht helfen Sie jemandem, zum Beispiel - Tabelle mit 3 Spalten
oder
Zwei Möglichkeiten für mich arbeiten.
InformationsquelleAutor der Antwort syp_dino
Wählen Sie die datecolumn des Monats, so dass u kann immer nur eine Zeile pro link, z.B.:
Glück............
Oder
u wenn Sie die Datums-Spalte als timestamp konvertieren Sie das format für Datum und führen verschiedene auf den link, so dass Sie bekommen können verschiedene link-Werte basierend auf Datum statt datetime
InformationsquelleAutor der Antwort kalyan