MySQL 2表,插入前查询

时间:2013-02-12 00:39:06

标签: mysql

我很困惑,这就是我所拥有的。

两个表,一个是临时的,一个是永久的。

 table  Temptable:   
 city , state          //- has a list of 20 citys and states

 table  Permtable: 
  city , state          //- has hundreds of citys and states

我想做两件事:

  1. 我想从Temptable中使用city和state,并查询Permtable以查看它是否已包含 那个城市和州。如果不是,我希望它添加它。

  2. 如果它在城市和州有匹配,我希望它播放c:\ sound.wav然后我想将它添加到

  3. permtable。

    我迷失了如何做到这一点。

2 个答案:

答案 0 :(得分:2)

这将告诉您TempTable中存在或不存在哪些记录:

SELECT T.City, T.State, CASE WHEN P.State IS NULL THEN 'DOES NOT EXIST' ELSE 'DOES EXIST' END
FROM TempTable T
   LEFT JOIN PermTable P ON T.City = P.City AND T.STate = P.State

您可以插入PermTable中不存在的记录,如下所示:

INSERT INTO PermTable
SELECT T.City, T.State
FROM TempTable T
   LEFT JOIN PermTable P ON T.City = P.City AND T.STate = P.State
WHERE P.State IS NULL

不确定您是否需要播放声音,然后添加它就没有意义(因为它已经存在)。

答案 1 :(得分:0)

由于我们没有在这里运行的代码,查询城市和州的临时表,然后查询SELECT COUNT(id)FROM permtable WHERE city ='$ tempcity'AND state ='$ tempstate'。

然后在查询中使用mysqli_num_rows查看是否找到任何匹配项。

$q= "SELECT COUNT(*) FROM temptable WHERE city='$tempcity' AND state='$tempstate'";
$r = @mysqli_query($dbc, $q);

if(mysqli_num_rows($r) != 0) {
echo "<embed src =\"sound.wav\" hidden=\"true\" autostart=\"true\"></embed>";
}
else { 
//Do your other stuff.
}

这实际上取决于你如何设置表格。如果您有列'State'和列'City',其中'City'就像'Dallas-Austin-Houstin-San Antonio'那么您将不得不查询'State',将'City'的值分解为数组,运行一段时间检查数组中的$ tempcity,如下所示:

$q = "SELECT city FROM permtable WHERE state='$tempstate'";
$r = @mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);

if (mysqli_num_rows($r) == 1) { //STATE MATCH

$cityCheck = explode("-", $row['city']);
$i = 0;
$count = count($cityCheck);
$goodMatch = 0;

while ($i < $count) { //find out if user already voted on post
if ($cityCheck[$i] == $tempcity) { 
$goodMatch = 1;
} //City State match
else { } //City does not match with state, continue while loop.
$i++;
} //END WHILE

else { } //STATE DID NOT MATCH

if ($goodmatch) {
echo "<embed src =\"sound.wav\" hidden=\"true\" autostart=\"true\"></embed>";
}
else {}