根据Id从不同的表中获取数据

时间:2017-07-13 22:22:44

标签: php mysql

我正在建立一个小型电子商务网站,我想显示评论,我想为人们创建屏幕名称(名字的第一个字母连接到姓氏上),但我可以&#39 ; t弄清楚如何从我的客户表中获取信息。让我告诉你我到目前为止所做的代码:

$invId = filter_input(INPUT_GET, 'invId', FILTER_SANITIZE_NUMBER_INT); // this is taken from a name value pair from the view
// Gets the raw data from the database    
function getProRev($invId){
        $db = acmeConnect();
        $sql = "SELECT * FROM reviews WHERE invId = :invId ORDER BY reviewId DESC";
        $stmt = $db->prepare($sql);
        $stmt->bindValue(':invId', $invId, PDO::PARAM_STR);
        $stmt->execute();
        $tn = $stmt->fetchAll();
        $stmt->closeCursor();
        return $tn;
    }

// Builds the simple review display
function buildReviewDisplay($reviews){
    $rd = "<div id='reviewView'>";
    foreach ($reviews as $review){
        $rd .= "<h2>$review[clientId]</h2>";
        $rd .= "<h3>$review[reviewDate]</h3>";
        $rd .= "<p>$review[reviewText]</p>";
        $rd .= "<hr>";
    }
    $rd .= "</div>";
    return $rd;
}

正如您所看到的,我正在显示不是我想要的clientId(一个数字),现在这就是我被困的地方。我设置了两个表(客户端和评论)之间的关系,但我无法弄清楚如何获取数据。这是我试图编写的功能,但它没有工作:

// Trying to get the dang client info
function getUsername($clientId){
$db = acmeConnect();
$sql = "SELECT * FROM clients WHERE clientId = :clientId";
$stmt = $db->prepare($sql);
$stmt->bindValue(':clientId', $clientId, PDO::PARAM_STR);
$stmt->execute();
$cd = $stmt->fetchAll();
$stmt->closeCursor();
$fletter = substr($cd['clientFirstname'], 0, 1);
$scrnam = $fletter . $cd['clientLastname'];
return $scrnam;
}

我知道这没有用,因为没有任何东西将$clientId参数传递给函数,但它包含在$tn[]数组中,所以必须有一种方法我可以从$clientId数组中取$tn[]并查询数据库中的名字和姓氏,但我无法弄清楚如何。

1 个答案:

答案 0 :(得分:1)

您可以在第一个查询中将clients表加入评论表。

SELECT * FROM reviews
LEFT JOIN clients ON reviews.clientId = clients.clientId
WHERE invId = :invId ORDER BY reviewId DESC

然后您就可以访问客户端名称列,而无需为您显示的每个评论执行其他查询。

这样您就可以使用getUsernamebuildReviewDisplay的代码。

foreach ($reviews as $review) {
    $fletter = substr($review['clientFirstname'], 0, 1);
    $scrnam = $fletter . $review['clientLastname'];
    $rd .= "<h2>$scrnam</h2>";
    $rd .= "<h3>$review[reviewDate]</h3>";
    $rd .= "<p>$review[reviewText]</p>";
    $rd .= "<hr>";
}