2017-07-13 23 views
0

私は小さな電子商取引のWebサイトを構築していますが、レビューを表示したいので、人のためのスクリーン名を作成したい(名字の最初の文字を姓に連結)しかし、私はクライアントのテーブルから情報を取得する方法を把握することはできません。私はあなたに私がこれまで行ってきたコードをお見せしましょう:あなたが見ることができるように
IDに基づいて別のテーブルからデータを取得

$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(番号)を表示しています私は立ち往生した。私は2つのテーブル(クライアントとレビュー)の関係を設定していますが、データを取得する方法を理解することはできません。ここで私が書くしようとした機能ですが、それはうまくいきませんでした:

// 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を取得し、姓と名義のデータベースを照会する方法が必要ですが、どのようにすればよいかわかりません。

+0

「getUsername($ review ['clientId']) 'できませんか? – Barmar

+0

@Barmar私はそれを試みましたが、PHPは関数括弧の中の[]が好きではありません –

+0

関数の引数で配列アクセスに問題はありません。あなたは間違ったことをしたに違いありません。 – Barmar

答えて

1

クライアントテーブルを最初のクエリのレビューテーブルに結合できます。

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

次に、表示するレビューごとに追加のクエリを実行する必要なく、クライアント名の列にアクセスできます。

getUsernameのコードをbuildReviewDisplayに使用できます。

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>"; 
} 
+0

)のようなものを書いています。ありがとうございました!私はジョインで少しばかげているので、今すぐ見直す必要があります! –

+1

左または右は、関係の "所有"側を示しています。この場合、すべてのレビューが表示されるように左結合を使用しました。何らかの理由で一致するクライアントがありません。 –

関連する問題