【问题标题】:Compare id from a query to id existing in another query (to see if table A id exists in table B) in a PHP echo在 PHP 回显中将查询中的 id 与另一个查询中存在的 id 进行比较(以查看表 B 中是否存在表 A id)
【发布时间】:2018-03-23 03:59:38
【问题描述】:

总结:我正在寻找比较表中的 ID 以查看它是否存在于另一个表中。理想情况下,我想在 PHP 回显语句中执行此操作(使用来自两个单独查询的结果)。是否可以在此 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。注意:我已经编写了添加和删除脚本并在另一个文件中工作,我只需要帮助。

到目前为止我已经尝试过

  • 在我的 echo(php 端)中添加引用另一个查询的“if”语句。
  • 尝试三元运算符(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>";

【问题讨论】:

  • 你能把这个标题改成英文有意义的东西吗?当标题简洁地描述了核心问题时,你更有可能获得答案,现在它似乎是一个单词的集合,很难理解我是否应该根据它阅读其余的帖子。
  • 问题标题很糟糕。请改进它,这就是我们能理解它的原因。

标签: php mysql


【解决方案1】:

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

当您执行$cxn-&gt;query(...) 时,您会收到PdoStatement。不是来自数据库的明确结果。

所以,在您的代码中,我看到: "...&lt;td&gt;($row["id"]=$in)? "active":""&lt;/td&gt;..."

那一定是编译错误。

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

那么它应该是这样的:

"...&lt;td&gt;" . (($row["id"] == $in) ? "active" : "") . "&lt;/td&gt;..."

无论如何,$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 中。
  • 现在你可以"...&lt;td&gt;" . (($row["exist_on_favorites"] == 1) ? "active" : "") . "&lt;/td&gt;..."

请阅读有关关系数据库、一对一、一对多、多对多关系的更多信息。

【讨论】:

  • 感谢您详细说明。我相信您的良好解释有助于回答我的问题,因为我试图在 PHP 中进行的比较总是返回 false,因为它实际上并没有返回 ID。我将按照建议向查询中添加更多内容,然后比较查询中返回的两条记录。我今天会试一试,如果出错,我会更新帖子。
猜你喜欢
  • 2022-11-12
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2012-08-16
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多