所以我有两张桌子,一张叫做“问题”,一张叫做“测试”。“问题”中的每一行都有“id”、“test”列和与该问题无关的其他几列。'tests' 表有列 'id'、'name' 和其他几个不相关的列。
基本上,在我的网站上,每次有人创建测试时,都会在“测试”中创建一个新行,并给它一个“id”。从那里,用户提出的每个问题,都会在“问题”表中创建一个新行,每个问题都有一个“id”以及与“测试”表中的“id”具有相同编号的“测试”列它所属的。
昨天我们错误地从'tests'表中删除了几行,但是所有的问题仍然在'questions'表中,这意味着我们只需要找到'questions'表中的哪些行的'test'值不是链接到 'tests' 表中的任何 'id',所以这是我们想出的 .php 脚本:
<?php
$conn = mysql_connect ('localhost', 'hidden', 'hidden') or die ('Error connecting');
if (!$conn) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('hidden', $conn);
$sql = "SELECT * FROM questions";
$result = mysql_query($sql,$conn);
while ($row = mysql_fetch_array($result)) {
$test = $row['test'];
$questionID = $row['id'];
$sql2 = "SELECT * FROM tests where id = $test";
$result2 = mysql_query($sql2, $conn);
$row2 = mysql_fetch_array($result2);
$num_rows = mysql_num_rows($result2);
if ($num_rows == 0) {
echo "Unlinked question: $questionID (test $test) <br/>";
}
}
?>
但是,它不会回显任何“未链接的问题..”,这将帮助我们确定哪些测试我们丢失并需要重新创建,为它们提供正确的“id”以链接到“问题”表的“测试”列。有没有其他方法可以解决这个问题?是的,我们确实备份了表格,但不幸的是我们每隔一周才做一次,而且大部分删除的测试都是最近的。
更新:
$sql = "
SELECT q.id AS QuestionID
FROM questions q
LEFT JOIN tests t
ON (q.test = t.id)
WHERE q.test IS NOT NULL AND t.id IS NULL";
$result = mysql_query($sql,$conn) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$questionID = $row['QuestionID'];
$testID = $row['test'];
echo $row;
echo "The question with the id: $questionID is not linked to the test: $testID";
}
?>