2016-03-08 80 views
1

的1點的值我有2代表具有以下結構:加入列名與TAB2

// 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
Value 4:Val4

由於col1col3也在tab2之內,因此它們的值應該是粗體。
所以我只需要一個「標誌」適當的查詢。在前端,我只會循環結果並尋找標誌。如果該標誌已設置,則將該值顯示爲粗體。

我真的沒有影響數據庫結構。

+0

什麼是連接兩個表的條​​件? –

+0

'tab1'是否有固定數量的colN'列?我的意思是(col1,col2,col3和col4)?你怎麼把這兩張桌子聯繫起來? – 1000111

+0

@DylanSu:沒有實際的連接條件。它應該檢查'tab1'中的列是否也出現在'tab2'中。 – user1170330

回答

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

+0

謝謝。但用戶需要定義表格,他想從中獲取值。所以'tab1'可以不同,我們不知道所有的列名。 – user1170330

+0

在這種情況下,我們可以將列名保留爲'?'在實際查詢中,然後在運行時根據表結構進行替換.. –

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; 

SQL FIDDLE

+0

謝謝。但用戶需要定義表格,他想從中獲取值。所以'tab1'可以不同,我們不知道所有的列名。 – user1170330

+0

然後,我肯定會說,一個非常糟糕的設計,你甚至不知道列名!要麼改變你的設計,要麼付錢。對不起,說夥計。 – 1000111

0

由於您設計的限制,你不能單獨與MYSQL要做到這一點,但你可以用PHP的幫助:

  1. 得到tbl2的

  2. 使用T中的列名軟管列名從TBL 1

得到你的結果請嘗試以下(假設你使用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); 
}