2015-10-12 111 views
0

下面是代碼:是否可以使用mysql將結果添加到結果中?

// connect and select the database 
$smt = $db->query(" SELECT 'one' which, col1, col2 FROM table1 WHERE col1 = '10' 
         UNION ALL 
        SELECT 'two' which, col1, col2 FROM table2 WHERE col1 = '10' 
        "); 

while($result = $smt->fetch()) { 
    if($result['which'] == 'one'){ 
     $result['col1'] = 'String: '.$result['col1']; 
    } 
} 

正如你在上面的代碼中看到,有一個字符串的col1(只是table1)結果相結合的IF()聲明。現在我想知道,是否可以使用MySQL來做到這一點? (目前我使用PHP來做)

換句話說,我可以在MySQL中做到這一點嗎?

if($result['which'] == 'one'){ 
    $result['col1'] = 'String: '.$result['col1']; 
} 
+1

是的,案例陳述。搜索一下。 –

+1

@JorgeCampos emm,是的,我想我可以使用'Case'語句來做到這一點,謝謝 – Shafizadeh

+0

使用['IF'](https://dev.mysql.com/doc/refman/5.0/en/if.html)和['CONCAT'](https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat)就像這樣:'IF(which =「one」,CONCAT(「String: 「,col1),col1)AS col1'。 – h2ooooooo

回答

3

如果你知道你要放在第一個SELECT語句的第一列的前面是什麼字符串,它不是動態的,那麼你可以拼接你在第一列的前希望字符串:

$smt = $db->query("SELECT CONCAT('String:',col1), col2 FROM table1 WHERE col1 = '10' 
        UNION ALL 
       SELECT CONCAT('String2: ',col1), col2 FROM table2 WHERE col1 = '10' 
       "); 
+0

哇,它工作正常,真的我很好奇,因爲沒有任何條件! + 1upvote – Shafizadeh

1

您可能需要使用CASE和CONCAT。嘗試下面的東西

$smt = $db->query(" SELECT 'one'which, CASE(WHEN (which = 'one') THEN CONCAT('String:',which) ELSE col1 END) as col1, col2 FROM table1 WHERE col1 = '10' 
        UNION ALL 
       SELECT 'two' which, CASE(WHEN (which = 'two') THEN CONCAT('String:',which) ELSE col1 END) as col1, col2 FROM table2 WHERE col1 = '10' 
       "); 
+0

請在第一個查詢中刪除''one''後面的''' – Shafizadeh

+0

完成並小心使用'as col1'將字符串連接起來,然後'WHERE col1 = 10'將不起作用。給它一些其他的名字。 –

+0

啊,好的! +1 upvote爲你。 (然而'CASE()THEN'是額外的開銷。) – Shafizadeh

相關問題