如何根据特定列多次选择mysql记录并在表中显示?
我有一张这样的桌子:如何根据特定列多次选择mysql记录并在表中显示?,mysql,database,Mysql,Database,我有一张这样的桌子: id, name, date1, qty1, note1, date2, qty2, note2, date3, qty3, note3, admin 一些示例记录: 1, something , 03-17-2017, 20, wow , , , , , , , greg 2, nothing , 03-17-2017, 25, hmm , 03-18-2017, 26, ok , ,
id, name, date1, qty1, note1, date2, qty2, note2, date3, qty3, note3, admin
一些示例记录:
1, something , 03-17-2017, 20, wow , , , , , , , greg
2, nothing , 03-17-2017, 25, hmm , 03-18-2017, 26, ok , , , , dave
3, everything, 03-17-2017, 30, cool, 03-18-2017, 31, yup, 03-19-2017, 32, nice, john
那么,如果我想这样显示数据,我的select语句会是什么样子呢
id | name | date | qty | note | admin
-------------------------------------------------
1 | something | 03-17-2017 | 20 | wow | greg
2 | nothing | 03-17-2017 | 25 | hmm | dave
2 | nothing | 03-18-2017 | 26 | ok | dave
3 | everything | 03-17-2017 | 30 | cool | john
3 | everything | 03-18-2017 | 31 | yup | john
3 | everything | 03-19-2017 | 32 | nice | john
因此,如果2和3列没有值,则记录只显示一次。
如果3列中没有值,则记录显示两次。
如果1、2和3列包含数据,则记录显示为3行。
当记录显示为2行或更多行时,每行应具有一些相同的值和一些不同的值
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for jobs
-- ----------------------------
DROP TABLE IF EXISTS `jobs`;
CREATE TABLE `jobs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`admin` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
`date1` varchar(50) NOT NULL,
`note1` varchar(255) NOT NULL,
`qty1` varchar(50) NOT NULL,
`date2` varchar(50) NOT NULL,
`note2` varchar(255) NOT NULL,
`qty2` varchar(50) NOT NULL,
`date3` varchar(50) NOT NULL,
`note3` varchar(255) NOT NULL,
`qty3` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of jobs
-- ----------------------------
INSERT INTO `jobs` VALUES ('1', 'greg', 'something', '03-17-2017', 'wow', '20', '', '', '', '', '', '');
INSERT INTO `jobs` VALUES ('2', 'dave', 'nothing', '03-17-2017', 'hmm', '25', '03-18-2017', '26', 'ok', '', '', '');
INSERT INTO `jobs` VALUES ('3', 'john', 'everything', '03-17-2017', 'cool', '30', '03-18-2017', '31', 'yup', '03-19-2017', '32', 'nice');
SET FOREIGN_KEY_CHECKS=1;
表中最好有多个主键。 例如主键ID、日期
CREATE TABLE notes (
id INT NOT NULL AUTO_INCREMENT,
name CHAR(30),
date INT,
qty INT,
note CHAR(50),
admin CHAR(10),
PRIMARY KEY(id, date)
);
您可以使用尝试这样的查询,但在您的帖子中,创建是不正确的,我几乎可以肯定插入也更改了字段
SELECT id, `name`, date1, qty,note,admin
FROM(
SELECT id, 1 AS subid, `NAME`, date1 AS date1 , qty1 AS qty, note1 AS note , admin FROM jobs
UNION ALL
SELECT id, 2 AS subid, `name`, date2 AS date1 , qty2 AS qty, note2 AS note , admin FROM jobs WHERE date2 <>''
UNION ALL
SELECT id, 3 AS subid, `name`, date3 AS date1 , qty3 AS qty, note3 AS note , admin FROM jobs WHERE date3 <> ''
) AS tabs
ORDER BY id,subid;
看来这张桌子应该重新设计了。也似乎与PHP无关。将此表的id、数量、日期、注释存储在另一个表中。然后加入数据。请发布从表中创建和插入的记录,然后我将在“创建”部分的“创建和插入记录”部分向您发布查询。