加入两个表并检查是否存在记录

时间:2015-01-13 14:05:39

标签: php mysql

我正在尝试从表中显示一些记录,如果不存在则显示按钮创建新的。如果存在以显示记录。

有两个表格 - 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
                ));

2 个答案:

答案 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"