如何根据特定列多次选择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、数量、日期、注释存储在另一个表中。然后加入数据。请发布从表中创建和插入的记录,然后我将在“创建”部分的“创建和插入记录”部分向您发布查询。