Comment peut obtenir des valeurs uniques de la table de données à l'aide de dql?
J'ai un tableau dans lequel il y a une colonne dans laquelle les différentes valeurs sont stockées.je veux récupérer les valeurs uniques de la table à l'aide de dql.
Doctrine_Query::create()
->select('rec.school')
->from('Records rec')
->where("rec.city='$city' ")
->execute();
Maintenant je ne veux que des valeurs uniques. Quelqu'un peut-il me dire comment faire...
Modifier
Structure De La Table:
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 ;
C'est la Requête que je suis en utilisant:
Doctrine_Query::create()
->select('DISTINCT rec.city')
->from('Records rec')
->where("rec.state = '$state'")
// ->getSql();
->execute();
Generting Sql pour que cela me donne:
SELECT DISTINCT r.id AS r__id, r.city AS r__city FROM records r WHERE r.state = 'AR'
Maintenant vérifier le sql généré::::
DISTINCTES est sur 'id' colonne où que je veux Distinctes sur la ville de la colonne. Quelqu'un sait comment résoudre ce problème.
EDIT2
Id est unique cause de son auto la valeur différentielle.Ya j'ai quelques doublons réels dans la ville de la colonne comme: Delhi et Delhi. Droit.. Maintenant quand j'essaie de récupérer des données à partir d'elle, je suis Delhi à deux reprises. Comment puis-je faire une requête comme ceci:
select DISTINCT rec.city where state="xyz";
Cause cela va me donner la bonne sortie.
EDIT3:
Quelqu'un qui peut me dire comment comprendre cette requête..???
select('img.*')
à select('DISTINCT img.*')
DISTINCT
s'applique à toutes les colonnes que vous sélectionnez. OIE SELECT DISTINCT a, b, c
peut être vu comme SELECT DISTINCT(a, b, c)
. Est-ce un problème pour vous? Avez-vous des duplicités dans rec.city
? Sont-ils réels des duplicités? (Nom de la ville serait une terrible clé, ils ne sont pas uniques par un effort.)juste quelqu'un de vérifier le texte sous EDIT2
OriginalL'auteur Mohit Jain | 2010-01-27
Vous devez vous connecter pour publier un commentaire.
Dépend de la version que vous utilisez, mais j'ai eu le même problème et l' ->distinct() a travaillé pour moi.
OriginalL'auteur
Pourriez-vous utiliser un GROUP BY?
OriginalL'auteur
Il n'est pas nécessaire dans RawSql
À la place de ->select('DISTINCTES rec.ville")
Utilisez ->select('DISTINCTES(rec.ville) ville')
OriginalL'auteur
Vous pouvez utiliser le Raw_Sql classe pour accomplir cette tâche. Voici un test je l'ai fait sur mon propre base de données:
OriginalL'auteur
La raison Doctrine est toujours à l'ajout de la clé primaire de la liste des champs se trouve à l'intérieur de l'Hydratation. Lors de la Doctrine de l'extraction de lignes de la Base de données elle hydrate (=convertit en une hiérarchie d'objets et les références du modèle d'objets à l'aide de la clé primaire. Dans votre cas, ce comportement n'est pas souhaité, car les noms de ville sont d'intérêt.
Je suggère deux solutions, malheureusement je ne peux pas tester maintenant.
$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);
$villes doit contenir un tableau de tableaux avec des touches comme 'rec_city'.
Veuillez noter que l'utilisation de la
?
espace réservé dans le cas des déclarations, il est de bonne pratique de laisser la Doctrine faire de s'échapper et de ne pas lutter avec vous-même.OriginalL'auteur
DISTINCTS est une fonction d'agrégation. En tant que telle Doctrine ne peut hydrater votre résultat dans les objets. Utiliser un autre hydratation de la stratégie, comme bartman a suggéré.
a bien fonctionné pour moi
OriginalL'auteur
Celui-ci fonctionne pour moi.
OriginalL'auteur
Re-répondu:
Vérifié cela sur mon ordinateur local n'a pas fonctionné. Alors laissez-moi des conseils pour utiliser PDO jusqu'à ce que ce sera amélioré ou corrigé:
Astuce
Je vous recommande d'utiliser clé étrangère référencé à la liste des villes sur
city
colonne au lieu de texte brut pour plus de flexibilité et de meilleures performances.veuillez vérifier mes édité réponse. Merci!
mec c'est pas la solution. Je ne suis pas en mesure de comprendre pourquoi, diable, cette requête ne peut pas être compris ..???
OriginalL'auteur