J'ai une table dans laquelle il y a une colonne dans laquelle différentes valeurs sont stockées. Je veux récupérer des valeurs uniques de cette table à l'aide de DQL. maintenant je ne veux que des valeurs uniques. Quelqu'un peut-il me dire comment faire ça ... p> Modifier strud> p> Structure de table: p> select DISTINCT rec.city where state="xyz";
9 Réponses :
Réponse à nouveau strong>: vérifié cela sur mon ordinateur local - n'a pas fonctionné. Alors laissez-moi vous conseiller d'utiliser PDO jusqu'à ce que cela soit amélioré ou corrigé: p> Conseil strong>
Je vous recommanderais d'utiliser Key étranger référencé à la liste des villes sur City < / code> colonne au lieu d'un texte brut pour la flexibilité et une meilleure performance. p> p>
Sélectionnez Distinct R.ID comme R__ID, R.School comme R__School d'enregistrements R.City =? Ceci est le SQL généré par la requête. Mais vérifiez l'emplacement de mot clé distinct. c'est pour la colonne ID non pour la colonne de l'école. Vérifiez la partie d'édition dans la question. Merci
mec ce n'est pas la solution. Je ne suis pas capable de comprendre pourquoi l'enfer cette requête ne peut pas être compris .. ???
La doctrine de la raison est toujours en train d'ajouter la clé primaire à la liste des champs réside dans l'hydratation. Lorsque la doctrine récupère des lignes de la base de données, elle hydrate (= convertit) dans une hiérarchie d'objet et références les objets de modèle à l'aide de la clé primaire. Dans votre cas, ce comportement n'a pas été recherché, car les noms de la ville sont intéressants. P>
Je suggère deux solutions, malheureusement je ne peux pas les tester maintenant. P>
$ Les villes doivent contenir une gamme de tableaux avec des clés telles que "REC_CITY". P>
Veuillez noter l'utilisation du $ q = doctrine_rawsql :: créer ()
-> Sélectionnez ("Distinct {Rec.City} ')
-> de ('Records rec')
-> où ('rec.state =?', $ État)
-> AddComponent ('Rec', 'record'); code> p>
$ vities = $ q-> exécuter () code> p>
$ q = doctrine_query :: créer ()
-> Sélectionnez ("Distinct Rec.City")
-> de ('Records rec')
-> où ("rec.state =?", $ État); code> p>
$ vities = $ q-> exécuté (tableau (), doctrine_core :: hydrate_scalar); code> p>
? code> espace réservé dans l'endroit où des déclarations, c'est une bonne pratique de laisser la doctrine faire l'échappement et ne pas lutter avec lui vous-même. P>
Vous pouvez utiliser le Raw_SQL classe pour y accomplir. Voici un test que je viens de faire sur ma propre base de données:
distinct est une fonction d'agrégation. Comme cette doctrine ne peut pas hydrater votre résultat dans des objets. Utilisez une stratégie d'hydratation différente, comme Bartman l'a suggéré.
$q = Doctrine_Query::create() ->select('DISTINCT rec.city') ->from('Records rec') ->execute(array(), Doctrine_Core::HYDRATE_SCALAR);
Il n'y a pas besoin de RawSQL
À la place de -> Sélectionnez ("Distinct Rec.City")
UTILISATION -> Sélectionnez ("Distinct (Rec.City) en tant que ville ') P>
ITA Les crochets autour du RECLITY qui se débarrassent de l'ID. Sans elle, la doctrine apporte une carte d'identité et de la ville et ce n'est pas distinct. Ta. Sauvez-moi créer une autre table.
Pourriez-vous utiliser un groupe par?
dépend de la version que vous utilisez, mais j'avais le même problème et -> distinct () a fonctionné pour moi.
Doctrine_Query::create() ->select('rec.city')->distinct() ->from('Records rec') ->where("rec.state = '$state'") ->execute();
S'il vous plaît, n'utilisez jamais des paramètres de requête non évaluée comme -> où ("rec.state = '$ state'") code> sauf si vous voulez que votre Web piraté vraiment facilement (Injection SQL). Utilisez plutôt des paramètres sûrs: `-> où ('rec.state =: état') -> SetParameter ('' State ', $ State)`
$query = $this->getEntityManager()->createQueryBuilder() ->select('DISTINCT(p.document)') ->from('Products', 'p'); This one works for me.
Si vous souhaitez utiliser une requête de doctrine dans un référentiel, les suivants ont fonctionné pour moi:
Remarque: J'utilise Oracle 11g, mais cette même requête doit fonctionner sur MySQL. P>
$sql = " SELECT DISTINCT d.fieldname FROM Oracle:Dmessage d " ; $query = $this->getEntityManager()->createQuery($sql); $results = $query->getResult();
Essayez de changer
SELECT ('IMG. *') CODE> TO
SELECT ('IMG distinct. *') Code>
distinct code> s'applique à toutes les colonnes que vous sélectionnez. Iow
Sélectionnez Distinct A, B, C CODE> peut être vu comme
Sélectionnez Distinct (A, B, C) CODE>. Est-ce un problème pour vous? Avez-vous des duplicités dans
Rec.City CODE>? Sont-ils de vrais-couplicités? (Le nom de la ville ferait une clé terrible, ils ne sont pas uniques en aucun cas.)
@ juste quelqu'un vérifier le texte sous Edition2