总结:我希望比较一个表中的ID,看它是否存在于另一个表中。理想情况下,我想在PHP echo语句中执行此操作(使用两个单独查询的结果)。是否可以在这个PHP语句中执行此操作,或者我应该先设置查询以返回ID然后将其输入?
详细说明:
我正在尝试创建一个执行以下操作的php表:
(1)显示mysql表的结果
(2)允许用户将项目添加到收藏夹列表
(3)收藏夹列表应将第一张表中的ID复制到新表中
(4)一旦id存在于另一个表中,喜欢的项目旁边的图标或链接应该改变
(5)单击喜欢的项目会将其从表格中删除(因此基本上会进行相同类型的处理)
现在我的PHP页面执行以下操作:
(1)连接数据库
(2)查询结果,循环并构建表
(3)将行id传递给另一个将其添加到表
我越来越不知道我怎么能把这些"收藏"图标显示它正在使用中,并在第二次单击时使用删除脚本(我希望这是有道理的)
我是新手,而不是开发人员(希望我能正确地传达这一点)。我想象我能做到这一点:
(1)在查询中加入两个表并将其包含在内
(2)在查询(函数等)中在mysql端执行其他操作
(3)在php loop / echo
我阅读的很多东西都推荐使用Ajax,但是我正在尝试学习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>";
答案 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>..."
请详细了解关系数据库,关系一对一,一对多,多对多。