2012-10-25 53 views
1

我有2个表,如下图所示,找到联合查询后如何更新?

coin 
---- 
chanceNo 
userID 
coin_code 
date 

coin2 
---- 
chanceNo 
userID 
coin_code 
date 

我的查询,其中“12345”是在哪个表,如下(这是正确和成功的搜索&匹配)可见,

SELECT coin_code from coin WHERE coin_code='12345' UNION 
Select coin_code from coin2 WHERE coin_code='12345'; 

但是,我坚持更新搜索后的查询。我发现coin_code ='12345'后我怎样才能更新?

我知道基本的更新查询是这样的,

UPDATE coin2 SET userID='name', date='12-12-12' WHERE coin_code='12345' 

但是,如果“12345”在另一张表,硬币是什么?我可以知道,如何编写这个查询?

+0

你想更新什么? – Deepak

+0

是你的第一个查询发现哪个表的值为'12345'? – Deepak

+0

Deepak,是的,第一个查询是找到哪个表的值为12345,一旦找到,我想更新。但如何更新另一个查询或smth? – Amazinglykai

回答

2

这个查询会告诉你哪个表coin_code在发现:

SELECT "coin" which_table, coin_code 
FROM coin 
WHERE coin_code = '12345' 
UNION 
SELECT "coin2" which_table, coin_code 
FROM coin2 
WHERE coin_code = '12345' 

现在,你有表名,你可以用它替换成一个UPDATE查询:

$row = mysqli_fetch_assoc($sel_stmt); 
$upd_stmt = mysqli_prepare("UPDATE {$row[which_table]} SET userID = ?, date = ? WHERE coin_code = ?"); 
+0

看起来像他被第二部分击中! – Deepak

+0

查看编辑答案。 – Barmar

+1

哎呀我扩大你的答案! – Deepak

1

扩展Barmar的回答你可以这样做,

$sql="SELECT 'coin' which_table, coin_code 
     FROM coin 
     WHERE coin_code = '12345' 
     UNION 
     SELECT 'coin2' which_table, coin_code 
     FROM coin2 
     WHERE coin_code = '12345'"; 
$result = mysqli_query($sql); 
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ 

    //Now updating the table 
    $sql_update = "UPDATE {$row['which_table']} SET userID='name', date='12-12-12' 
       WHERE coin_code='{$row['coin_code']}'"; 
    mysqli_query($sql_update); 
} 
+0

嗯,我没有得到它,为什么选择'硬币'which_table?硬币是表格名称。不是任何列标题名称。抱歉打扰你。 – Amazinglykai

+0

@Amazinglykai这只是一个正在返回的字符串 - 注意UNION的每个分支都返回一个不同的字符串。这可以让你知道哪个分支找到了匹配的行,所以你会知道在第二个查询中更新哪个表。 – Barmar

+0

嗯,我试过你的代码,我无法找到匹配的coin_code,因此,无法更新。 – Amazinglykai