iT邦幫忙

0

有沒有用php把資料表A的資料存到資料表B的方法?

  • 分享至 

  • xImage

以下的程式碼是我目前的想法,可是有錯,想請問有沒有把資料表的值給變數的方法?

<?php
date_default_timezone_set("asia/taipei");
$dns="mysql:host=127.0.0.1;dbname=Sensors";

try{
$db=new PDO($dns,'pi','raspberrypi');
$db->exec("set names utf8");

$sql="Select * from nowSensors";
$result=$db->query($sql);
$temp=$row["Temp"];
$humidity=$row["Humidity"];
$soilhumidity=$row["Soilhumidity"];
$time=$row["Time"];

$sql="insert into SaveData(Temp,Humidity,Soilhumidity,Time) values($temp,$humidity,$soilhumidity,$time);";
$result=$db->exec($sql);
if($result==1){
echo "新增成功";
}else{
echo "新增失敗";
}
}catch(PDOException $e){
printf("DATABASE_ERRMESG:%s",$e->getMessage());
}
?>
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
海綿寶寶
iT邦大神 1 級 ‧ 2022-06-08 09:47:26
最佳解答

這篇看來
nowSensors 是「目前最新的一筆資料」
SaveData 是「歷史記錄的所有資料」
由於你實作系統時先做 nowSensors 再做 SaveData
才會碰到目前這個問題

以下提供兩種做法
你挑你自己喜歡的
1.二合一(刪除 nowSensors table)
原本 Update nowSensors 那段不用
改成把資料 Insert into SaveData
原本「顯示目前資料」是 SELECT * FROM nowSensors
改成 SELECT TOP 1 * FROM SaveData ORDER BY time DESC
2.現況補強
不用先 SELECT * FROM nowSensors 再 INSERT SaveData
而是在 Update nowSensors 時(當下已有各變數資料),就「順便」INSERT SaveData

專題很認真
給你加加油
/images/emoticon/emoticon49.gif

sc05201 iT邦新手 5 級 ‧ 2022-06-08 17:13:53 檢舉

感謝建議

0
wiseguy
iT邦超人 1 級 ‧ 2022-06-07 22:22:41

你有什麼理由需要透過 php 做這件事嗎?練習 php 的 DB select/insert ?
我會這麼問是因為,你寫這一坨的程式做的事,其實只需要在 mysql console 裡下一條
insert into SaveData select Temp,Humidity,Soilhumidity,Time from nowSensors;
就好了。

sc05201 iT邦新手 5 級 ‧ 2022-06-08 17:13:59 檢舉

感謝建議

6

說真的,這還真的不能說是PHP。SQL語法本身就可以做到了

INSERT INTO B表 
SELECT * FROM A表

不過以上的語法,是A表及B表的節構要一樣。
但如果A表及B表的節構不一樣。
假設B表是位是 b1 b2 b3
要將A表的 a1 對應 b1 a2 對應 b2 a3 對應 b3

INSERT INTO B表 
SELECT a1 AS b1,a2 AS b2,a3 AS b3 FROM A表

如以上的寫法就行了。多研究一下SQL的應用吧。

追加特別的教學。
如果有自動編號的ID,但又不想直接帶過來。(畢竟怕有衝突而導致出錯)
則可以用NULL。
這樣就會直接幫你自動編號了。

INSERT INTO B表 
SELECT null AS id,a1 AS b1,a2 AS b2,a3 AS b3 FROM A表

再來就是A表不存在b表的dbType欄位。但B表的dbtype又想要將其指定值。
則可以用如下處理

INSERT INTO B表 
SELECT null AS id,a1 AS b1,a2 AS b2,a3 AS b3,'A' AS dbtype FROM A表

以上大致上的應用都給你了。

sc05201 iT邦新手 5 級 ‧ 2022-06-08 17:13:49 檢舉

感謝建議

我要發表回答

立即登入回答