我想允许用户对徽标进行评分。查询应选择该用户尚未评级的下一个徽标。

在review.php上,我们选择一个徽标:

<?php
$dbconnect = mysqli_connect("localhost", "***", "***", "***");
if (!isset($_SESSION)) {
session_start();
}
$thisuser = $_SESSION['uid']

$Recordsetlogos = mysqli_query($dbconnect, "SELECT * FROM tbllogos WHERE status = 'live' LIMIT 1"); //query
$row_Recordsetlogos = mysqli_fetch_assoc($Recordsetlogos);
?>


到目前为止,一切都很好。

用户看到徽标,选择等级并提交表格。

在下一页上,我们从用户填写的表单中收集数据,然后将记录插入数据库中的另一个表中:

<?php
$dbconnect = mysqli_connect("localhost", "***", "***", "***");

$did = $_POST['did']; // user ID
$lid = $_POST['lid']; // logo ID
$review = $_POST['review']; // rating
$desrank = $_POST['desrank']; // user's rank

$updateSQL = mysqli_query($dbconnect, "INSERT INTO tblreviews (did, lid, vote, desrank) VALUES ('$did', '$lid', '$review', '$desrank')");

mysqli_close($dbconnect);

header("Location: review.php"); // send user back
exit;


用户返回到review.php,对下一个徽标进行评分。

当review.php加载时,它会显示用户刚刚评分的徽标。

我意识到这可能是一个简单的联接,但是我无法解决。

这是它应该做的,用英语...

Select from tbllogos
where status = 'live'
AND
logo and $thisuser do not appear as a pair in tblreviews.


谢谢你的帮助!

最佳答案

您在选择查询中需要一个LEFT JOIN,并仅在WHERE个行中进行过滤,而无需联接行。

SELECT l.* FROM tbllogos l
LEFT JOIN tblreviews r ON r.lid = l.id AND r.did = $thisuser
WHERE l.status = 'live' AND r.lid IS NULL
LIMIT 1


我假设有一个列tbllogos.id作为主键。如果以其他方式命名,则您当然需要修改查询。

该查询显示“选择没有对此用户进行评论的徽标”

关于php - 具有复杂联接的SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44241223/

10-12 00:22
查看更多