Ich habe 3 tische - benutzer, service und rating. Der Primärschlüssel des Benutzers ist Benutzer-ID und ein Fremdschlüssel in der Diensttabelle. Es ist auch ein Fremdschlüssel in der Bewertungstabelle verknüpft mit rated_id (die Benutzer-ID der Person, die bewertet wird) und rater_id (die Benutzer-ID der Person, die die Bewertung liefert)sql, um die dienstleistungen nach der anzahl der bewertungen aufzulisten die die dienstleistungsinhaber haben
Jeder Benutzer hat einen Dienst und kann verschiedene Bewertungen haben. Wenn das Push-Feld in der Bewertungstabelle 1 ist, dann ist es eine gültige Bewertung und kann verwendet werden. Wenn es 0 ist, ist es noch nicht gültig und wartet darauf, gedrückt zu werden.
Ich brauche eine Abfrage, um mir eine Liste aller Dienste anzuzeigen, sortiert in decending von den Benutzern mit den meisten Bewertungen bestellt. Dienste, die zu Benutzern gehören, die Bewertungen haben, aber nicht weitergeleitet werden, sind zusammen mit Diensten von Benutzern ohne Bewertungen unten aufgeführt.
Hier ist die SQL die Tabelle und die Daten zu erstellen:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `ratings`
--
-- --------------------------------------------------------
--
-- Table structure for table `ratings`
--
CREATE TABLE IF NOT EXISTS `ratings` (
`unique_id` int(11) NOT NULL AUTO_INCREMENT,
`rater_id` int(11) NOT NULL,
`rated_id` int(11) NOT NULL,
`pushed` int(11) NOT NULL,
PRIMARY KEY (`unique_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Dumping data for table `ratings`
--
INSERT INTO `ratings` (`unique_id`, `rater_id`, `rated_id`, `pushed`) VALUES
(1, 4, 1, 1),
(2, 4, 1, 1),
(3, 4, 2, 1),
(4, 4, 3, 0);
-- --------------------------------------------------------
--
-- Table structure for table `service`
--
CREATE TABLE IF NOT EXISTS `service` (
`unique_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`description` varchar(100) NOT NULL,
PRIMARY KEY (`unique_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `service`
--
INSERT INTO `service` (`unique_id`, `user_id`, `description`) VALUES
(1, 1, 'marks service'),
(2, 2, 'shanes service'),
(3, 3, 'peters service');
-- --------------------------------------------------------
--
-- Table structure for table `user`
--
CREATE TABLE IF NOT EXISTS `user` (
`user_id` int(11) NOT NULL,
`name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `user`
--
INSERT INTO `user` (`user_id`, `name`) VALUES
(1, 'mark'),
(2, 'shane'),
(3, 'peter'),
(4, 'jobposter');
und hier ist eine Abfrage i mit
SELECT s.*, count(r.rated_id), r.pushed FROM service s
join user u on (u.user_id = s.user_id)
join ratings r on (r.rated_id = u.user_id)
group by r.rated_id
order by r.rated_id
kam das Problem seiner unvollständig ist. Benutzer ohne Bewertungen wont zeigen und wenn ein Benutzer mehrere Ratings hat aber keine geschoben werden, werden sie hoch oben ...
brilliant, das funktioniert perfekt, danke :) – Mark