J'ai une table avec des enregistrements et il a une ligne appelée J'ai essayé de faire quelque chose comme ceci: p> J'ai créé une vue: p> puis j'ai créé cette requête: p> catégorie code>. J'ai inséré trop d'articles et je ne veux sélectionner que deux articles de chaque catégorie.
SELECT *
FROM tbl_artikujt
WHERE
artikullid IN
(
SELECT artikullid
FROM limitrows
ORDER BY category DESC
)
ORDER BY category DESC;
3 Réponses :
limite n'arrête que le nombre de résultats que la déclaration revient. Ce que vous recherchez est généralement appelé fonctions analytique / fenêtrage / classement - que MySQL ne prend pas en charge, mais vous pouvez imiter à l'aide de variables: si vous ne changez pas Sélectionner x. * code>, l'ensemble de résultats inclura les valeurs
Rank CODE> et
VAR_CATATEGORY CODE> - Vous devrez spécifier les colonnes que vous voulez vraiment si ce n'est pas le cas. p> p>
Fonctionne parfaitement, c'est ce dont j'avais besoin
Puis-je créer une vue d'une certaine manière à partir de cette sélection, j'ai essayé mais il est écrit: 1349 - La sélection de la vue contient une sous-requête dans la clause de FROM
@Axheladini: Désolé, MySQL ne le permettra pas de quelques raisons - la sous-requête, à l'aide de variables ... Les vues MySQL sont extrêmement restreintes, j'ai peur - ils répertorient les restrictions dans la documentation de la vue Create View: dev.mysql.com/doc/refman/5.1/fr/create-view.html
Pour moi, cela semble sélectionner comme top 3 de chaque catégorie comme s'il a été commandé sous forme de t.category asc, t.articleid asc code> mais comment le feriez-vous pour le sélectionner comme
t.category ASC, T.ArticleID Desc code>?
Utiliser le groupe par lieu de commande par. p>
SELECT * FROM ( SELECT VD.`cat_id` , @cat_count := IF( (@cat_id = VD.`cat_id`), @cat_count + 1, 1 ) AS 'DUMMY1', @cat_id := VD.`cat_id` AS 'DUMMY2', @cat_count AS 'CAT_COUNT' FROM videos VD INNER JOIN categories CT ON CT.`cat_id` = VD.`cat_id` ,(SELECT @cat_count :=1, @cat_id :=-1) AS CID ORDER BY VD.`cat_id` ASC ) AS `CAT_DETAILS` WHERE `CAT_COUNT` < 4 ------- STEP FOLLOW ---------- 1 . select * from ( 'FILTER_DATA_HERE' ) WHERE 'COLUMN_COUNT_CONDITION_HERE' 2. 'FILTER_DATA_HERE' 1. pass 2 variable @cat_count=1 and @cat_id = -1 2. If (@cat_id "match" column_cat_id value) Then @cat_count = @cat_count + 1 ELSE @cat_count = 1 3. SET @cat_id = column_cat_id 3. 'COLUMN_COUNT_CONDITION_HERE' 1. count_column < count_number 4. ' EXTRA THING ' 1. If you want to execute more than one statement inside " if stmt " 2. IF(condition, stmt1 , stmt2 ) 1. stmt1 :- CONCAT(exp1, exp2, exp3) 2. stmt2 :- CONCAT(exp1, exp2, exp3) 3. Final "If" Stmt LIKE 1. IF ( condition , CONCAT(exp1, exp2, exp3) , CONCAT(exp1, exp2, exp3) ) share
Lire cet article: Top N d'un groupe
Top N de groupe: thinoyes.com/littlenoise/?p=36