J'ai une table qui contient des informations sur le produit avec plusieurs instances d'un produit avec le même titre, identifié par différentes couleurs et leurs identifiants. J'ai besoin de sortir la ligne entière où l'ID = l'ID maximum regroupé par le titre, mais je ne peux pas sembler l'obtenir pour le faire. Voici une table très simplifiée et quelques exemples de données: dans cet exemple avec mon code, je reçois 1 rico rouge blah1 quand je veux 3 rico jaune blah3. P> Voici le code que j'utilise: p> mise à jour: merci gecs, p> J'ai utilisé la réponse d'Alinoz à proposer le code suivant qui fonctionne :) p>
7 Réponses :
Essayez d'ajouter une clause supplémentaire à votre endroit où avec pd_id = (Sélectionnez max (pd_id) à partir de ...)
SELECT pd_id, pd_title, pd_description, pd_colour, pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new FROM product WHERE cat_sub_id_1 = '".$cat_sub_id."' AND cat_parent_id='".$cat_parent_id."' AND pd_id = (select max(pd_id) from product) GROUP BY pd_title
Ne fonctionnera pas. Vous choisiriez une seule pièce d'identité max dans la sous-requête, qui s'applique à un seul groupe de produits, ce qui rend le reste de la clause où la clause exclure tous les autres produits, à l'exception de celui dont l'identifiant est le plus élevé dans toute la table.
Je pense que cela pourrait fonctionner (non testé):
SELECT * FROM that_table WHERE id IN ( SELECT MAX(id) FROM that_table GROUP BY title ) /* AND this = that */
Étant donné que vous commandez déjà, vous pouvez utiliser la ligne numéro = 1 dans la condition. Voir cette lien . Et puisque votre dB n'est pas connu. Je ne peux pas donner une requête spécifique mais vous diriger dans la direction p>
ou essayer Top SQL qui donnera le même résultat, comme commander est utilisé p>
aaahhh, le bon vieux plus grand-n-per-group ... Bien sûr, vous devez l'adapter à vos besoins en conséquence. P> aussi , Je pense que c'est un "must lis": SQL Sélectionner uniquement des lignes avec une valeur max sur une colonne P > p>
@ypercube merci. La chose est la suivante: cela est posé si souvent (et je réponds si souvent!) Que j'ai décidé d'avoir une de mes réponses et de ré-écrivez-la comme une réponse globale sur le sujet, pour aider les autres à l'avenir.
C'est une excellente réponse. N'hésitez pas à ajouter l'approche (comme dans ma réponse ici) qui produit des résultats (légèrement) différents quand il y a des liens, par exemple. 2 lignes ou plus avec ID maximum.
Outre l'approche de Adrian et Salman, il y a une partie qui donne des résultats différents quand il y a des liens, deux lignes ou plus avec le même identifiant (maximum). Il ne montrera qu'une seule ligne par titre, tandis que l'autre requête vous montrera toutes (dans votre cas qui est probablement sans importance que vous commandez par ID, que je suppose est la clé principale):
SELECT t.* FROM TableX AS t JOIN ( SELECT DISTINCT title --- what you want to Group By FROM TableX ) AS dt ON t.PK = --- the Primary Key of the table ( SELECT tt.PK FROM TableX AS tt WHERE tt.title = dt.title ORDER BY id ASC --- (or DESC) what you want to Order By LIMIT 1 )
+1 Très intéressant ... Ceci sélectionne uniquement une valeur maximale par identifiant de groupe dans le cas d'une "cravate", souhaitable, en fonction des spécifications.
Crédits à Quassnoi: Stackoverflow.com/Questtions/1201296/...
et: Stackoverflow.com/Questtions/7233757/order- dans le groupe par / ...
Juste une chose: apparemment, toutes les versions de MySQL n'acceptent pas la limite de sous-requêtes dev.mysql.com/doc/refman/5.0/fr/subquerery-Errors.html Toutefois, l'approche fonctionnera pour d'autres dB premiers n.
MySQL accepte = (SELECT ... LIMITE 1) CODE> (pas sûr de la version et ci-dessus). Il n'accepte pas
dans (SELECT ... LIMITNE X) CODE> ou
> TOUT (SELECT ... LIMIT X) CODE>
Je vois, intéressant en effet. Je parle couramment MySQL, pas non pas "Nativement fluide" :)
Tout simplement pour une ligne par n'importe quel (dans ce cas 'ID') valeur max
Je pense que ce n'est pas nécessaire d'utiliser des sous-éléments: c'est juste un exemple rapide de mes tests. Juste par shure pour commander de la même manière dans le substrant_indexes et utilisez un bon séparateur. P> amusez-vous p> p> P>
Veuillez formater votre requête. C'est illisible.
Le montant maximum (PD_ID) ne fait rien: vous devez tester cela contre quelque chose.
N'utilisez pas la réponse d'Alinoz. Utilisez Adrian ou Salman's (si le
ID code> est la clé principale).