php - 使用mysql获取空列的名称

标签 php mysql

我有一组图像路径存储在这样的表中:

    +---------------------------------------------------------+
    |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/

相关文章:

javascript - Ajax 无法在 WordPress 插件短代码的前端工作

php - 如何在不干扰 HTML 标签的情况下从 php 字符串中剥离字符

MySQL 优化 : EXPLAIN "Extra" column contains "Using Where"

php - 背景色 <td> + INSERT Mysql

php - Firebase Cloud Messaging,接收通知的问题

php - 如何使用 JavaScript PHP 和 MariaDb 验证登录表单?

php - getRole() 表单 RoleInterface 在 symfony 上返回空

MYSQL - 在 TEXT 列中存储 unicode 字符(表情符号)

php - 打印 PHP 中 select 语句的值

javascript - 如何将 mysql 结果传递给变量以在模板引擎中呈现