我有一组图像路径存储在这样的表中:
+---------------------------------------------------------+
|ID |pimg0 |pimg1 |pimg2 |
+-------------+-------------+--------------+--------------+
|1 |path/to/img0 |path/to/img1 | |
+---------------------------+--------------+--------------+
|2 |path/to/img0 |path/to/img1 | |
+---------------------------+--------------+--------------+
我想获取空字段的表名,以便我可以在其中放入一个新条目。
我试过在 mysql 查询中嵌套 IFNULL() 命令,但没有成功:
IFNULL(pimg0, IFNULL(pimg1, IFNULL(pimg2, IFNULL(pimg3, IFNULL(pimg4, IFNULL(pimg5))))))
我也尝试了一些不起作用的案例 block 。理想情况下,我希望我的查询在上述情况下返回“pimg2”,但如果要返回“pimg1”,我可以轻松地增加它。
编辑:编辑上表,以澄清。
最佳答案
您正在经历 repeating groups across columns 的痛点之一,这违反了第一范式。
如果您通过创建一个带有一个列作为图像路径的子表,并在您有多个图像时添加多个行来规范化,那么痛苦就会消失。
CREATE TABLE Images (
image_id INT AUTO_INCREMENT PRIMARY KEY,
owner_id INT NOT NULL, -- references `id` in your original table
pimg VARCHAR(40)
);
INSERT INTO Images (owner_id, pimg) VALUES
(1, 'path/to/img0'), (1, 'path/to/img1'),
(2, 'path/to/img2'), (2, 'path/to/img3');
以这种方式构建数据库可以更轻松地完成许多任务:
- 通过插入新行插入新图像;无需查找空白列。
- 将第四张或第五张图片添加到给定的
owner_id
。 - 搜索给定图像并报告哪个
owner_id
拥有它。 - 对每个
owner_id
的图像进行计数。 - 避免重复。
关于php - 使用mysql获取空列的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594124/