我有2个具有以下结构的表:
// tab1:
| ID | Col1 | Col2 | Col3 | Col4 |
|----|------|------|------|------|
| 1 | Val1 | Val2 | Val3 | Val4 |
| 2 | Val5 | Val6 | Val7 | Val8 |
// tab2:
| Name |
|------|
| Col1 |
| Col3 |
我现在需要从tab1
获取所有值并以某种方式将它们与tab2
列的值相加,以便在前端tab1
中的所有列中也是如此在tab2
中出现,是粗体。
在伪代码中它看起来像那样:
SELECT Col1, COl2, Col3, Col4 FROM tab1, tab2 WHERE ID=1 AND {possibly a left join on tab2}
前面的表格所需的输出可能是:
值1: Val1
值2:Val2
价值3: Val3
价值4:Val4
由于col1
和col3
也位于tab2
,因此其值应为粗体。
所以我只需要使用"标记"进行适当的查询。在前端我然后将循环结果并寻找标志。如果设置了标志,则将值显示为粗体。
我对数据库结构没有任何影响。
答案 0 :(得分:0)
假设表结构已完成且我们知道所有列名,我们可以执行以下查询来检查值是否存在。
select col1 as col1 ,
(select count(*) from tab2 where name = 'col1') col1_exists,
col2 as col2,
(select count(*) from tab2 where name = 'col2') col2_exists,
col3 as col3 ,
(select count(*) from tab2 where name = 'col1') col3_exists
from tab1;
对于非零“存在”值,我们可以以粗体显示相应的列值。这是SQL Fiddle。
答案 1 :(得分:0)
试试这个:
SELECT
t.`VALUE`,
(CASE WHEN tab2.Name IS NULL THEN 0 ELSE 1 END) flag
FROM
(
SELECT
Col1 AS `VALUE`,
'Col1' AS colNum
FROM tab1
WHERE ID = 1
UNION
SELECT
Col2 AS `VALUE`,
'Col2' AS colNum
FROM tab1
WHERE ID = 1
UNION
SELECT
Col3 AS `VALUE`,
'Col3' AS colNum
FROM tab1
WHERE ID = 1
UNION
SELECT
Col4 AS `VALUE`,
'Col4' AS colNum
FROM tab1
WHERE ID = 1
) t
LEFT JOIN tab2
ON tab2.`Name` = t.colNum;
答案 2 :(得分:0)
由于您的设计受到限制,您无法单独使用MYSQL,但您可以借助PHP:
从tbl2
使用这些列名称从tbl1
尝试以下操作(假设您使用mysqli
):
//get columns from tbl2
$sql = 'SELECT * FROM tbl2';
$result = mysqli_query($conn, $sql);
$cols = [];
while ($row = mysqli_fetch_assoc($result)) {
$cols[] = $row['name'];
}
//get results from tbl1 using column names
$sql = 'SELECT ' . implode(',', $cols) . ' FROM tbl1 WHERE ID=1';
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result)) {
var_dump($row);
}