0
我在這裏有一個案例,我想創建一個基於3個表的前10個產品,這是最多的視圖,emails_request和apply_request,我的表結構是這樣的從3個表中獲得最多的產品
product_views
===================
id | product_id | date
--------------------------
1 | 1 | today
2 | 1 | today
3 | 2 | today
product_email_request
===================
id | product_id | date
--------------------------
1 | 1 | today
2 | 1 | today
3 | 2 | today
product_apply_request
===================
id | product_id | date
--------------------------
1 | 1 | today
2 | 2 | today
3 | 2 | today
,我的目標是才達到這樣的
product_id | view_count | email_count | apply_count
==========================================================
1 | 2 | 2 | 1
2 | 1 | 1 | 2
它可能做到這一點在MySQL?我很困惑,我沒有讀過,我應該使用聯盟這一點,但仍然不必須的線索..
這裏是SQL腳本
/*
Navicat MariaDB Data Transfer
Source Server : LOKAL
Source Server Version : 100121
Source Host : localhost:3306
Source Database : test
Target Server Type : MariaDB
Target Server Version : 100121
File Encoding : 65001
Date: 2017-07-23 17:17:25
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for product_apply
-- ----------------------------
DROP TABLE IF EXISTS `product_apply`;
CREATE TABLE `product_apply` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) DEFAULT NULL,
`creation` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of product_apply
-- ----------------------------
INSERT INTO `product_apply` VALUES ('1', '1', '2017-07-23 17:17:00');
INSERT INTO `product_apply` VALUES ('2', '2', '2017-07-23 17:17:08');
-- ----------------------------
-- Table structure for product_emails
-- ----------------------------
DROP TABLE IF EXISTS `product_emails`;
CREATE TABLE `product_emails` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) DEFAULT NULL,
`creation` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of product_emails
-- ----------------------------
INSERT INTO `product_emails` VALUES ('1', '1', '2017-07-23 16:46:32');
INSERT INTO `product_emails` VALUES ('2', '1', '2017-07-23 16:46:47');
INSERT INTO `product_emails` VALUES ('3', '2', '2017-07-23 16:47:05');
INSERT INTO `product_emails` VALUES ('4', '2', '2017-07-23 16:47:47');
INSERT INTO `product_emails` VALUES ('5', '3', '2017-07-23 17:00:18');
INSERT INTO `product_emails` VALUES ('6', '1', '2017-07-23 17:00:29');
-- ----------------------------
-- Table structure for product_views
-- ----------------------------
DROP TABLE IF EXISTS `product_views`;
CREATE TABLE `product_views` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of product_views
-- ----------------------------
INSERT INTO `product_views` VALUES ('1', '1', '2017-07-23 16:47:25');
INSERT INTO `product_views` VALUES ('2', '1', '2017-07-23 16:47:32');
INSERT INTO `product_views` VALUES ('3', '2', '2017-07-23 16:47:38');
任何幫助將是真棒.. 三江源
見https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very -simple-sql-query – Strawberry
是的,可以用MySQL來做到這一點。您需要加入這三個表格,然後對每個表格中相應產品的記錄進行計數/求和。當你陷入困境時,請自己去發佈你的代碼。 – fubar
@fubar我的問題是我真的迷路了,直到我不知道我應該在查詢上寫什麼,因爲我是新的在mysql .. –