将查询中的id与另一个查询中存在的id进行比较(以查看表B中是否存在表A id)在PHP echo

时间:2018-03-23 03:59:38

标签: php mysql

总结:我希望比较一个表中的ID,看它是否存在于另一个表中。理想情况下,我想在PHP echo语句中执行此操作(使用两个单独查询的结果)。是否可以在这个PHP语句中执行此操作,或者我应该先设置查询以返回ID然后将其输入?

详细说明:

我正在尝试创建一个执行以下操作的php表:

(1)显示mysql表的结果
(2)允许用户将项目添加到收藏夹列表
(3)收藏夹列表应将第一张表中的ID复制到新表中 (4)一旦id存在于另一个表中,喜欢的项目旁边的图标或链接应该改变
(5)单击喜欢的项目会将其从表格中删除(因此基本上会进行相同类型的处理)

现在我的PHP页面执行以下操作:
(1)连接数据库
(2)查询结果,循环并构建表
(3)将行id传递给另一个将其添加到表

的php页面

我越来越不知道我怎么能把这些"收藏"图标显示它正在使用中,并在第二次单击时使用删除脚本(我希望这是有道理的)

我是新手,而不是开发人员(希望我能正确地传达这一点)。我想象我能做到这一点:
(1)在查询中加入两个表并将其包含在内 (2)在查询(函数等)中在mysql端执行其他操作 (3)在php loop / echo

中完成某些工作

我阅读的很多东西都推荐使用Ajax,但是我正在尝试学习php。注意:我已经编写了添加和删除脚本并在另一个文件中工作,我需要帮助才能到达那里。

到目前为止,我已经尝试了

  • 添加" if"在我的echo(php端)中引用另一个查询的语句。
  • 尝试三元运算符(php方面)
  • 尚未完成任何特定于mysql查询的内容 - 不确定这是否有效并且更愿意从php文件中学习

没有成功。

/*Show grid of records for user to choose as fav, allow viewer to take action on it*/
$sql = "SELECT id, record1, record2 FROM MyTable";
$result = $cxn->query($sql);
$in = "SELECT id FROM MyFavorites"; //no idea if I should have this here or nested below
$exists = $cxn->query($in);
echo "<table><tr><th>record1</th><th>record2</th></tr>";
if ($result->num_rows > 0) { 
// output data of each row
while($row = $result->fetch_assoc()) {
//bring back records from table and attempt to case rowid to see if it exists in favorites table
    echo "<tr><td> " . $row["id"]. " " . $row["record1"]. "</td><td> " . $row["record2"]. "</td><td><a href='AddFavorite.php?favid=".$row['id']."'>Add</a></td><td>($row["id"]=$in)? "active":""</td></tr>";
} //basically what I want here is if exists direct to remove.php, if not exists redirect to add.php - adjust text accordingly

} else {
echo "no results";
}
echo "</table>";

1 个答案:

答案 0 :(得分:0)

不知道我是否理解你,但在阅读代码时,我发现了以下内容:

当您执行$cxn->query(...)时,您会收到PdoStatement。没有明确的数据库结果。

所以,在你的代码中我看到: "...<td>($row["id"]=$in)? "active":""</td>..."

这一定是编译错误。

我认为您正在尝试使用三元运算符: (condition) ? true-part : false-part

然后它应该是:

"...<td>" . (($row["id"] == $in) ? "active" : "") . "</td>..."

无论如何,$in是一个包含"SELECT id FROM MyFavorites"的字符串,将$row["id"]与该字符串进行比较将返回false。

您可以查询数据,包括表格MyFavorites中是否存在,例如:

SELECT t.id, record1, record2, IF(f.id IS NULL, 0, 1) as exist_on_favorites FROM MyTable AS t LEFT OUTER JOIN MyFavorites f ON (t.id = f.id)

  • FROM MyTable AS t LEFT OUTER JOIN MyFavorites f ON (t.id = f.id)表示:来自表MyTable的所有记录,我们称之为t,以及来自表MyFavorites的那些记录,我们称之为f,其中t.id等于f.id。
  • IF(f.id IS NULL, 0, 1):如果f.id为null,因为该表中没有相关的id,则返回0,否则返回1.该值将位于exists_on_favorites字段中。
  • 现在你可以"...<td>" . (($row["exist_on_favorites"] == 1) ? "active" : "") . "</td>..."

请详细了解关系数据库,关系一对一,一对多,多对多。