从查询结果中返回布尔值

时间:2015-04-15 03:30:33

标签: mysql

我有一个查询从我的数据库中检索标记和消息。提供userToken,我需要找到用户投票的每条消息作为布尔值返回。我想查询所有消息,并获得一个列表,其中列出了哪些消息已由特定用户投票,哪些消息尚未投票。对于已经投票的那些,我想要返回一个truthy布尔值。对于那些没有的,我想要返回一个falsey布尔值。我最大的挑战是我需要将它添加到我已用于检索标记和消息的查询中;但我不知道该怎么做,因为这个查询已经非常庞大了。

查询

var query = ([
  'SELECT',
  'marks.*,',
  'comments.commentString,',
  'COUNT(votes.id)',
  'FROM comments',
  'LEFT JOIN marks ON marks.commentId = comments.id',
  'LEFT JOIN votes ON votes.commentId = comments.id',
  'WHERE comments.messageId = ?',
  'GROUP BY comments.id'
]).join(' ');

var params = [userData.messageId];

模式

DROP DATABASE IF EXISTS uncovery;
CREATE DATABASE uncovery;

SET foreign_key_checks=0;

USE uncovery;

CREATE TABLE marks (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY (id),
  x float(10, 6),
  y float(10, 6),
  z float(10, 6),
  timestamp timestamp DEFAULT CURRENT_TIMESTAMP,
  messageId int(5) NULL,
  commentId int(5) NULL,
  userToken VARCHAR(255),
  FOREIGN KEY (messageId) REFERENCES messages(id),
  FOREIGN KEY (commentId) REFERENCES comments(id),
  FOREIGN KEY (userToken) REFERENCES users(token)
);

CREATE TABLE messages (
  id int(5) AUTO_INCREMENT,
  userToken VARCHAR(255),
  messageString text,
  image VARCHAR(255),
  score int(5) DEFAULT 0,
  PRIMARY KEY (id)
);

CREATE TABLE comments (
  id int(5) AUTO_INCREMENT,
  commentString text,
  messageId int(5),
  PRIMARY KEY (id),
  FOREIGN KEY (messageId) REFERENCES messages(id)
);

CREATE TABLE votes (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY(id),
  userToken VARCHAR(255),
  messageId int(5) NULL,
  commentId int(5) NULL,
  FOREIGN KEY (userToken) REFERENCES users(token),
  FOREIGN KEY (messageId) REFERENCES messages(id),
  FOREIGN KEY (commentId) REFERENCES comments(id),
  UNIQUE KEY (userToken, messageId),
  UNIQUE KEY (userToken, commentId)
);

CREATE TABLE users (
  token VARCHAR(255),
  PRIMARY KEY(token),
  total_votes int(5) DEFAULT 0
);

-- If a message does not have a userToken then this will not work
DELIMITER //
CREATE TRIGGER vote_increment AFTER INSERT ON votes
FOR EACH ROW
  BEGIN
    UPDATE users SET users.total_votes = (users.total_votes + 1) WHERE users.token = 
      (SELECT userToken FROM messages WHERE id = NEW.messageId);
  END;//
DELIMITER ;

编辑:

系统概述

此数据库架构专为移动聊天网络而设计。用户可以从当前位置查看特定范围内的消息。每个标记指示消息的位置。消息是包含用户在给定位置留下的文本的内容。评论是对任何给定消息的回复。此外,用户可以对他们喜欢的特定消息进行投票。投票很有效,但我们遇到的问题是确定邮件是否已经投票。我们需要知道邮件是否已被投票,因此“投票”按钮将突出显示手机。我的UI人员想要一个标记对象上的布尔值(当前正在检索我上面发布的查询的结果),它指示特定消息是否已被投票。

查询概述

上述查询旨在检索所有标记及其相关的注释,投票和消息,前提是用户坐标(作为查询的参数提供)在标记的特定范围内。此查询检索许多标记对象,而不仅仅是一个。

我想要的是除了要在每个对象中检索的标记及其相关内容之外,还要检索一个布尔值,该布尔值指示作为所提供消息的外键的消息是否已被投票由用户提供。

0 个答案:

没有答案