我有一个我需要编辑的现有PHP项目。还有一个包含一些内容的数据库。
有些表的组织如下:
表:tab_col
Col1
Col2
Col3
...
表checkbox
id column
1 Col1
2 Col4
...
其中一项任务是显示tab_col
的所有列。在它们旁边需要放置一个输入字段。如果表tab_col
中存在checkbox
的其中一列的名称,则会在列名称旁边放置一个复选框。否则它是一个文本域。
因此,在这种情况下,复选框会放在Col1
和Col4
旁边
它的外观如下:https://jsfiddle.net/e7Lpfs9f/
实际上,我只对SQL查询感兴趣。
通过此查询,我获得了所有列:
SHOW columns FROM tab_col
但是,我如何才能在一个查询中结合两个要求?我不想两次查询数据库。
PS:我知道,这可能不是在数据库中存储数据的最佳方式,但这是我必须使用的。
答案 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.id
为NULL
,则该列不在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表与复选框表之间存在匹配,则为文本框,否则为复选框