我正在尝试从表中显示一些记录,如果不存在则显示按钮创建新的。如果存在以显示记录。
有两个表格 - users
user_id
username
...
restaurants
rest_id
name
menu
因此,在用户创建并登录其帐户后,如果user_id
有餐馆user_id = menu
(来自餐馆的菜单),则必须具备条件。如果在餐厅显示按钮创建不存在。这是我尝试的查询
$q = $pdo->prepare("SELECT * FROM restaurants m
LEFT JOIN users ON users.user_id = m.menu WHERE rest_id = :user_id");
$q->bindParam(':user_id', $_SESSION['user_id']);
$q->execute();
// fetch the results
$results = $q->fetchAll(PDO::FETCH_ASSOC);
if(count($results) > 0) {
foreach($results as $res) {
echo '<a href="users/restaurant.php?rest_id='. $res['rest_id'] .'"> '.$res['name'].' </a>';
}
} else {
echo '<a href="users/restAdd.php?rest_id='.$_SESSION['user_id'].'">Create New</a>';
}
以这种方式,当用户登录时,他看到按钮Create New
,因为他没有按钮。问题是当他创建记录后再次登录时...按钮Create New
再次可见。
问题是在查询中还是没有?
更新:
menu
行在创建新会话时从会话中保留user_id。这是在restAdd.php
$sql = "INSERT INTO restaurants ( name, menu, image) VALUE ( :name, :menu, :image)";
$q = $pdo->prepare($sql);
$q->execute(array(
':name' => $name,
':menu' => $_SESSION['user_id'],
':image' => $forDB
));
答案 0 :(得分:1)
尝试使用此查询:
SELECT m.rest_id, m.name FROM restaurants m
INNER JOIN users ON users.user_id = m.menu
WHERE menu = :user_id
1)INNER JOIN而不是LEFT,你想检查是否有与用户相关的餐馆。
2)我认为你做了一个小错误,菜单字段包含用户ID
答案 1 :(得分:-1)
在这种情况下,您需要在where子句menu = :user_id
而不是rest_id = :user_id
试试这个:
SELECT * FROM restaurants m
LEFT JOIN users ON users.user_id = m.menu WHERE menu = :user_id"