我想允许用户对徽标进行评分。查询应选择该用户尚未评级的下一个徽标。
在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/