Я пытаюсь сделать запрос SQL, который получит сумму строк в другой таблице, где столбец uuid
соответствует столбцу post
в столбце type
, и добавит это значение в строку результатов. , Столбец type
в таблице votes
имеет значения 0 и 1, 0 означает -1 от суммы и 1 означает +1 к сумме баллов. После того, как все это будет завершено, я собирался отсортировать результаты в столбце score
, чтобы сначала набрать наибольшее количество очков.
Если вы хотите использовать скрипту SQL, ссылка здесь: http://sqlfiddle.com/#!9/cc490b/1/0
Сокращенная версия схемы таблицы для таблицы posts
:
uuid varchar(256)
contents text
author varchar(256)
comment varchar(256)
timestamp varchar(256)
removed varchar(256)
А схема таблицы votes
:
user varchar(256)
post varchar(256)
type int(1)
И так как это часть запроса, это схема таблицы follows
:
user varchar(256)
target varchar(256)
Мой текущий запрос, чтобы получить фид сообщений, следующий, я ищу базу, если от этого:
SELECT *
FROM posts
WHERE timestamp <= ?
AND removed IS NULL
AND comment IS NULL
AND author IN (SELECT target
FROM follows
WHERE user = ?
UNION
SELECT ? AS target)
ORDER
BY timestamp DESC
LIMIT 25;
Окончательный результат ожидаемого запроса следующий:
| uuid | contents | author | comment | timestamp | removed | score (DESC) |
| p12c | Hi! | u7h34 | NULL | 1560269397 | NULL | 451 |
| p100 | Chicken | u211f | NULL | 1560269417 | NULL | 14 |
DDLS:
DROP TABLE IF EXISTS `follows`;
DROP TABLE IF EXISTS `votes`;
DROP TABLE IF EXISTS `posts`;
CREATE TABLE `follows` (
`user` varchar(256) NOT NULL,
`target` varchar(256) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `follows` (`user`, `target`) VALUES
('user-uuid2', 'user-uuid1');
CREATE TABLE `votes` (
`user` varchar(256) NOT NULL,
`post` varchar(256) NOT NULL,
`type` int(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `votes` (`user`, `post`, `type`) VALUES
('user-uuid2', 'post-uuid9', 0),
('user-uuid2', 'post-uuid9', 1),
('user-uuid2', 'post-uuid8', 1);
CREATE TABLE `posts` (
`uuid` varchar(256) NOT NULL,
`contents` text NOT NULL,
`author` varchar(256) NOT NULL,
`comment` varchar(256) DEFAULT NULL,
`timestamp` varchar(256) NOT NULL,
`removed` varchar(256) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `posts` (`uuid`, `contents`, `author`, `comment`, `timestamp`, `removed`) VALUES
('post-uuid1', 'Hello world1!', 'user-uuid1', NULL, '1560184505', NULL),
('post-uuid2', 'Hello world2!', 'user-uuid1', NULL, '1560184506', NULL),
('post-uuid3', 'Hello world3!', 'user-uuid1', NULL, '1560184507', NULL),
('post-uuid4', 'Hello world4!', 'user-uuid1', NULL, '1560184508', NULL),
('post-uuid5', 'Hello world5!', 'user-uuid1', NULL, '1560184509', NULL),
('post-uuid6', 'Hello world6!', 'user-uuid1', NULL, '1560184510', NULL),
('post-uuid7', 'Hello world7!', 'user-uuid1', NULL, '1560184511', NULL),
('post-uuid8', 'Hello world8!', 'user-uuid1', NULL, '1560184512', NULL),
('post-uuid9', 'Hello world9!', 'user-uuid1', NULL, '1560184513', NULL),
('post-uuid10', 'Hello world10!', 'user-uuid1', NULL, '1560184514', NULL),
('post-uuid11', 'Hello world11!', 'user-uuid1', NULL, '1560184515', NULL),
('post-uuid12', 'Hello world12!', 'user-uuid1', NULL, '1560184516', NULL);