2011-11-05 119 views
0

我不知道如果加入語句以正確的方式是writen:MySQL的PHP​​連接語句

<?php 

功能generateComment($ commentID) {

$avatar_Q=mysql_query(" 
      SELECT * FROM comments com 
      INNER JOIN users us ON com.user_id=us.user_id 
      WHERE comment_id=$commentID // will that $commentID be red in that query string or will it treat it as a string "commentID" 
    "); 
    if($row=mysql_fetch_array($avatar_Q)) 
    { 
     $userName=$row["us.user_name"]; // do I refer to the fields like that 
     $avatarPath=$row["us.avatar"]; 
     $avatarRep=$row["us.reputation"]; 
     $message=$row["com.comment"]; 
     $date=$row["com.date"]; 
    } 
    mysql_close(); 

    if(!isset($avatarPath)) 
    { 
     $avatarPath="blank picture"; 
    } 

>

?這是編寫聯合聲明的最有效方式嗎?

回答

1

您的查詢寫入正確,但可以通過指定comment_id上的表來改進它,爲了更好地返回,我建議您指定要返回的列,還要使用「string」之外的變量,因爲它是一個數值(我想你忽略了單引號像...

$sql = "Select com.command_it, etc 
FROM ..... WHERE com.comment_id = ".$commentID.""; 

如果否則com.comment_id是文本或varchar必須使用單引號,如:

$sql = "Select com.command_it, etc 
FROM ..... WHERE com.comment_id = '".$commentID."'"; 

而且這種方式你只會得到有用戶的行和評論,如果一個用戶如果希望用戶也沒有意見,你不檢索用戶...

他有沒有意見,你必須使用一個LEFT JOIN

$sql = "SELECT com.comment_id, etc FROM users us 
      LEFT JOIN comments com ON com.user_id=us.user_id 
      WHERE com.comment_id=".$commentID.""; 
+0

我想一般把'AS'放在那裏只是爲了易於理解,並且對插入的字符串'com.comment_id = {$ commentID}'進行大括號處理。 – CD001

0

不確定wh在你用這條線做

WHERE comment_id=$commentID // will that $commentID be red in that query string or will it treat it as a string "commentID" 

「);

但是你需要指定comment_id來自哪個表,說comments,那麼你可能會做這樣的事情

$avatar_Q=mysql_query("SELECT * FROM comments com 
    INNER JOIN users us ON com.user_id=us.user_id 
    WHERE com.comment_id=$commentID"); 
0

,如果這是最好的辦法不是SUR,但你可以嘗試mysqlslap一個MySQL數據庫與它。將它與左連接和其他類型的連接進行比較,看看哪一個最適合您的情況。 MySQL全是關於掌。的。