Wie können einzigartige Werte aus den Daten einer Tabelle mit dql?
Ich habe eine Tabelle, in der gibt es eine Spalte, in der diverse Werte gespeichert werden.ich will abrufen eindeutige Werte aus der Tabelle mit dql.
Doctrine_Query::create()
->select('rec.school')
->from('Records rec')
->where("rec.city='$city' ")
->execute();
Jetzt will ich nur eindeutige Werte. Kann mir jemand sagen, wie das geht...
Bearbeiten
Tisch Struktur:
CREATE TABLE IF NOT EXISTS `records` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`state` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`school` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16334 ;
Dies ist die Abfrage, die ich benutze:
Doctrine_Query::create()
->select('DISTINCT rec.city')
->from('Records rec')
->where("rec.state = '$state'")
// ->getSql();
->execute();
Generting Sql für diese gibt mir:
SELECT DISTINCT r.id AS r__id, r.city AS r__city FROM records r WHERE r.state = 'AR'
Überprüfen Sie nun die generierte sql::::
VERSCHIEDENE ist auf die 'id' - Spalte, wo, wie ich will, Unterscheidbar Stadt Spalte. Weiß jemand wie man dieses Problem beheben.
EDIT2
Id ist einzigartig, weil es eine automatische inkrementelle Wert.Ya ich habe einige echte Duplikate in Spalte city wie Delhi und Delhi. Richtig.. wenn ich Jetzt versuche zum abrufen von Daten aus es, ich bin immer Delhi zwei mal. Wie kann ich Abfrage wie diese:
select DISTINCT rec.city where state="xyz";
Verursachen, das wird mir den richtigen Ausgang.
EDIT3:
Wer kann mir sagen, wie um herauszufinden, diese Abfrage..???
select('img.*')
zu select('DISTINCT img.*')
DISTINCT
gilt für alle Spalten, die Sie ausgewählt haben. IOW SELECT DISTINCT a, b, c
gesehen werden kann, als SELECT DISTINCT(a, b, c)
. Ist das ein problem für Sie? Sie haben duplicities in rec.city
? Sind Sie real duplicities? (Name der Stadt wäre eine schreckliche Schlüssel, Sie sind nicht eindeutig von einer Strecke.)nur jemand überprüfen, der text unter EDIT2
InformationsquelleAutor Mohit Jain | 2010-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hängt davon ab, welche version Sie verwenden, aber ich hatte das gleiche Problem und ->distinct() für mich gearbeitet.
InformationsquelleAutor cb0
Konnte verwenden Sie eine GROUP BY?
InformationsquelleAutor m14t
Gibt es keine Notwendigkeit in RawSql
An Stelle von ->select ("VERSCHIEDENE rec.Stadt")
Nutzen ->wählen Sie('DISTINCT(rec.Stadt) Stadt')
InformationsquelleAutor Max
Können Sie die Raw_Sql Klasse, dies zu erreichen. Hier ist ein test, ich habe gerade auf meine eigene Datenbank:
InformationsquelleAutor AJ.
Den Grund Lehre immer zusätzlich den Primärschlüssel auf der Liste Felder liegt innerhalb der Hydratation. Wenn die Lehre ruft Zeilen aus der Datenbank, hydrate (=konvertiert) in eine Objekt-Hierarchie und verweist auf die Modell-Objekte mithilfe des primären Schlüssels. In Ihren Fall, ist dieses Verhalten nicht erwünscht, da gerade die Ortsnamen von Interesse sind.
Ich schlage zwei Lösungen, leider kann ich nicht testen, Sie jetzt.
$q = Doctrine_RawSql::create()
->select('DISTINCT {rec.city}')
->from('Records rec')
->where('rec.state = ?', $state)
->addComponent('rec', 'Record');
$cities = $q->execute()
$q = Doctrine_Query::create()
->select('DISTINCT rec.city')
->from('Records rec')
->where("rec.state = ?", $state);
$cities = $q->execute(array(), Doctrine_Core::HYDRATE_SCALAR);
$sollten die Städte enthalten ein array von arrays mit keys wie "rec_city'.
Bitte beachten Sie die Verwendung der
?
- Platzhalter in der where-statements, es ist gute Praxis, lassen Lehre tun, die Flucht und kein Kampf mit sich selbst.InformationsquelleAutor bartman
DISTINCT ist eine aggregation Funktion. Als solche Lehre nicht Hydrat Sie Ihr Ergebnis in Objekte. Verwenden Sie ein anderes Hydratation Strategie, wie bartman vorgeschlagen hat.
funktionierte gut für mich
InformationsquelleAutor Stefan Haberl
Dieser arbeitet für mich.
InformationsquelleAutor npetrovski
Neu beantwortet:
Überprüft diese auf meinem lokalen computer - hat nicht funktioniert. Also lassen Sie mich Beratung zur Nutzung von PDO, bis sich dies verbessert oder behoben:
Tipp
Ich würde Ihnen empfehlen, Fremdschlüssel verwiesen auf die Liste der Städte auf
city
Spalte anstelle von Klartext-für mehr Flexibilität und bessere Leistung.bitte überprüfen Sie meine bearbeitete Antwort. Danke!
dude, das ist nicht die Lösung. Ich bin nicht in der Lage zu verstehen, warum zum Teufel diese Abfrage nicht herausgefunden ..???
InformationsquelleAutor Darmen