recherche

Maison  >  Questions et réponses  >  le corps du texte

php - problème de tri après groupe par

1. Pour un article, j'ai N nombreux commentaires
2. Maintenant, je souhaite obtenir les derniers commentaires pour chaque article
Cette sous-requête est possible, mais la condition est qu'aucune sous-requête ne soit utilisée. l'implémenter ? Il
SELECT FROM (SELECT FROM old_chapter_check_list ORDER BY id DESC) AS t GROUP BY cid LIMIT 10

大家讲道理大家讲道理2839 Il y a quelques jours813

répondre à tous(5)je répondrai

  • 怪我咯

    怪我咯2017-05-16 13:05:59

    D'après votre description, votre SQL semble insatisfaisant.
    Deux façons d'écrire
    1. Assurez-vous de ne pas utiliser de sous-requêtes si vous confirmez que le commentaire ne contient pas de délimiteur (tel que "|||"). , utilisez substring_index(group_concat)) Traitement de la fonction :

    select substring_index(group_concat(comment_content order by id desc separator '|||'),'|||',1) cmt,cid from old_chapter_check_list group by cid limit 10;
    

    2. Si vous n'êtes pas sûr qu'il contienne des caractères spéciaux, retirez d'abord les dernières valeurs d'identifiant des 10 articles avec les derniers commentaires (s'il s'agit de la seule clé primaire auto-incrémentée), puis effectuez une requête conjointe

    select a.cid,a.comment_content from old_chapter_check_list a join (select max(id) maxid from old_chapter_check_list group by cid order by maxid desc limit 10) b on a.id=b.maxid;

    répondre
    0
  • PHPz

    PHPz2017-05-16 13:05:59

    SELECT * FROM old_chapter_check_list GROUP BY cid ORDER BY id DESC LIMIT 10
    
    使用多次查询
    
    SELECT max(id) FROM old_chapter_check_list GROUP BY articleid
    
    查询出每篇文件评论的最大id
    
    根据前面的结果集,在循环中查询最大id对应的评论
    
    select * from old_chapter_check_list where cid = maxid
    

    répondre
    0
  • 怪我咯

    怪我咯2017-05-16 13:05:59

    Écrivez une vue et prenez-la directement depuis la vue

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:05:59

    La liste des élèves est basée sur les 2 élèves les plus âgés de chaque classe

    1、select * from tb A where id in (select id from tb B where A.class = B.class order by age desc limit 2) 
    
    2、select * from tb B where 2 > (select count(*) from tb B where A.class = B.class and B.age > A.age)
    
    3、select A.id,A.name,A.age,A.class from group_by_test A left join group_by_test B on A.class = B.class and A.age < B.age group by A.name,A.age,A.class having count(B.age)<2

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:05:59

    Ça y est, l'identifiant augmentera automatiquement et le cid augmentera automatiquement

    SELECT *,MAX(id) max_id FROM old_chapter_check_list GROUP BY cid order by max_id LIMIT 10

    répondre
    0
  • Annulerrépondre