在1个查询

时间:2016-02-15 19:16:46

标签: mysql sql checkbox mariadb

我有一个我需要编辑的现有PHP项目。还有一个包含一些内容的数据库。

有些表的组织如下:

表:tab_col

Col1
Col2
Col3
...

checkbox

id   column
1    Col1
2    Col4
...

其中一项任务是显示tab_col的所有列。在它们旁边需要放置一个输入字段。如果表tab_col中存在checkbox的其中一列的名称,则会在列名称旁边放置一个复选框。否则它是一个文本域。

因此,在这种情况下,复选框会放在Col1Col4旁边 它的外观如下:https://jsfiddle.net/e7Lpfs9f/

实际上,我只对SQL查询感兴趣。

通过此查询,我获得了所有列:

SHOW columns FROM tab_col

但是,我如何才能在一个查询中结合两个要求?我不想两次查询数据库。

PS:我知道,这可能不是在数据库中存储数据的最佳方式,但这是我必须使用的。

2 个答案:

答案 0 :(得分:1)

你可以做到

SELECT t1.column_name, ch.id
FROM information_schema.Columns t1
LEFT JOIN checkbox ch
  ON t1.column_name = ch.column
WHERE t1.table_name = 'tab_col'
ORDER BY t1.column_name;

如果ch.idNULL,则该列不在checkbox

答案 1 :(得分:0)

您可以使用存储过程解决此问题

WITH CTE1 (
        SELECT column_name
        FROM [DB_NAME].INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = N'tbl_col'
    )

WITH CTE2 (
        SELECT column_name
        FROM [DB_NAME].INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = N'checkbox'
    )

SELECT c1.column_name, 
     CASE ISNULL(c2.column_name,'0')
             WHEN '0' THEN 'checkbox'
             ELSE 'textbox'
     END 
         FROM CTE1 c1
   LEFT JOIN CTE2 c2 on c2.column_name = c1.column_name

因此,如果tbl_col表与复选框表之间存在匹配,则为文本框,否则为复选框