En général, ce que font les gens c'est publier les requêtes, les schémas des tables, etc... en gros tout ce qui s'affiche au moment de poster. Ce serait un bon début.Comment expliquer ce résultat ?
Rappel pratique - n'oubliez pas de :Attention, suivre ces consignes est obligatoire. Merci de les lire attentivement.
- suivre ces quelques conseils de débogage
- préciser quel SGBD vous utilisez ainsi que sa version
- utiliser les balises
[/i] pour afficher vos requêtes SQL. Ne postez pas de PHP à moins que cela soit 100% indispensable. Postez vos requêtes, pas vos scriptsCode : Tout sélectionner
[/i] et [i]- poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE" (fonction "Exporter" de phpMyAdmin)
- si nécessaire, poster un échantillon des données sous la forme d'une instruction "INSERT INTO"

J'ai du mal m'exprimer... Pourquoi n'a-t-on pas 540-661-177-838-825-527 ?Bonjour,
Lorsque j'exécute la première requête, j'obtiens les enregistrement suivants : 540-661
---------------------la seconde requête........................................................:177-838-825-540-661-527
---------------------les deux requêtes avec UNION.......................................:540-661-177-527-825-838
Comment expliquer ce résultat ? Merci par avance.
Brian
Code : Tout sélectionner
SELECT s2.sujet_id
FROM fsb_messages m2
JOIN fsb_sujets s2
USING ( sujet_id )
WHERE s2.sujet_nom LIKE '%asm%'
AND s2.sujet_nom LIKE '%[Réglé]%'
GROUP BY s2.sujet_id
ORDER BY COUNT(*) DESC)
UNION (SELECT s2.sujet_id
FROM fsb_messages m2
JOIN fsb_sujets s2
USING ( sujet_id )
WHERE s2.sujet_nom LIKE '%asm%'
GROUP BY s2.sujet_id
ORDER BY COUNT(*) DESC)Code : Tout sélectionner
--
-- Structure de la table 'fsb_messages'
--
CREATE TABLE fsb_messages (
message_id int(11) NOT NULL auto_increment,
forum_id mediumint(9) NOT NULL default '0',
sujet_id int(11) NOT NULL default '0',
membre_id int(11) NOT NULL default '0',
pseudo_posteur varchar(30) collate latin1_general_ci NOT NULL default '',
message_texte text collate latin1_general_ci NOT NULL,
message_temps int(20) NOT NULL default '0',
message_ip varchar(20) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (message_id),
KEY message_id (message_id),
KEY sujet_id (sujet_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-- --------------------------------------------------------
--
-- Structure de la table 'fsb_sujets'
--
CREATE TABLE fsb_sujets (
sujet_id int(11) NOT NULL auto_increment,
forum_id int(11) NOT NULL default '0',
membre_id int(11) NOT NULL default '0',
sujet_nom varchar(250) collate latin1_general_ci NOT NULL default '',
nb_vu int(11) NOT NULL default '0',
nb_reponse int(11) NOT NULL default '0',
dernier_message_id int(11) NOT NULL default '0',
dernier_message_temps int(11) NOT NULL default '0',
premier_message_id int(11) NOT NULL default '0',
sujet_type smallint(6) NOT NULL default '0',
sujet_status tinyint(4) NOT NULL default '1',
PRIMARY KEY (sujet_id),
UNIQUE KEY sujet_id (sujet_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLAT
Code : Tout sélectionner
ORDER BY COUNT(*) DESC, s2.sujet_id DESC
Contrairement à ce que je pensais, UNION ne conserve pas l'ordre des enregistrement, il te faut donc ordronner l'UNION complète. Afin de différencier les résultats des deux parties de l'UNION, on ajoute une colonne supplémentaire[...] use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows
Code : Tout sélectionner
(
SELECT 0 AS n, s2.sujet_id, COUNT(*) AS cnt
FROM fsb_messages m2
JOIN fsb_sujets s2 USING ( sujet_id )
WHERE s2.sujet_nom LIKE '%asm%'
AND s2.sujet_nom LIKE '%[Réglé]%'
GROUP BY s2.sujet_id
)
UNION
(
SELECT 2 AS n, s2.sujet_id, COUNT(*) AS cnt
FROM fsb_messages m2
JOIN fsb_sujets s2 USING ( sujet_id )
WHERE s2.sujet_nom LIKE '%asm%'
GROUP BY s2.sujet_id
)
ORDER BY n ASC, cnt DESC