Aufgrund der Anforderungen der Produkte des Unternehmens müssen wir nun eine Funktion implementieren, in der die grundlegenden Informationen der Benutzer gespeichert werden, und in Tabelle B werden einige Verhaltensweisen der Benutzer in Tabelle A gespeichert. Tabelle C und Tabelle B haben die gleichen Eigenschaften . Bei der Abfrage können wir nach den Zählergebnissen in Tabelle B oder Tabelle C sortieren, also haben wir über Join nachgedacht, aber es gab ein Problem.
Veröffentlichen Sie zunächst die Datenstrukturen der drei Tabellen
<code> CREATE TABLE `A` ( `id` int(11) NOT NULL auto_increment, `username` varchar(255) default NULL, PRIMARY KEY (`id`), ) ENGINE=MyISAM AUTO_INCREMENT=1;</code>
<code> CREATE TABLE `B` ( `id` int(11) NOT NULL auto_increment, `userid` int(11) default NULL, `dosomething` varchar(255) default NULL, PRIMARY KEY (`id`), KEY `userid` USING BTREE (`userid`) ) ENGINE=MyISAM AUTO_INCREMENT=1;</code>
<code> CREATE TABLE `C` ( `id` int(11) NOT NULL auto_increment, `userid` int(11) default NULL, `dosomething` varchar(255) default NULL, PRIMARY KEY (`id`), KEY `userid` USING BTREE (`userid`) ) ENGINE=MyISAM AUTO_INCREMENT=1;</code>
Ich habe es selbst ausprobiert und festgestellt, dass die Abfrageergebnisse unterschiedlich waren
<code>SELECT u.id, COUNT(s.id) AS sapply, COUNT(uu.id) AS ftotal FROM A AS u RIGHT JOIN B AS s ON u.id = s.userid RIGHT JOIN C AS uu ON u.id = `uu`.`userid` GROUP BY `u`.`id` ORDER BY `ftotal` DESC LIMIT 10</code>
Es liegt offensichtlich ein Problem mit den Daten vor, bitte sehen Sie sich die Ergebnisse separat an
<code>SELECT u.id, COUNT(s.id) AS sapply FROM A AS u RIGHT JOIN B AS s ON u.id = s.userid GROUP BY `u`.`id` ORDER BY `sapply` DESC LIMIT 10</code>
<code>SELECT u.id, COUNT(uu.id) AS ftotal FROM A AS u RIGHT JOIN C AS uu ON u.id = uu.userid GROUP BY `u`.`id` ORDER BY `ftotal ` DESC LIMIT 10</code>
Bitte helfen Sie mir, was ist das Problem? Die erste SQL-Anweisung enthält keinen Fehler, aber das Ergebnis ist falsch.