2011-07-25 57 views
0

我試圖讓從MySQL數據庫中的一些細節,但我工作這麼久,試了很多方法,我我現在完全失去了:■PHP - MySQL的加入 -

我需要得到的是兩個細節這取決於來自3個表格的信息。我需要得到$ title和$ SITEURL(從table_sites),其中當前用戶以前不點擊它,SITEURL業主仍然有剩餘的點數...

這裏是我的數據庫:

USER: 
id 
username 
password 
credits 
active 
clicks 

SITES: 
id 
userid 
title 
siteurl 
clicks 
active 
weight 

CLICKS: 
id 
siteid 
byuserid 

我試着與此MySql查詢:

include('db_con.php'); 
mysql_connect("$dbhost", "$dbusername", "$dbpassword")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

$qrym = mysql_query("SELECT * FROM `users` WHERE username='$username' LIMIT 1") or die (mysql_error()); 
    while($mem = mysql_fetch_object($qrym)){ 
    $uid = $row->id; 
    } 

$qrys = mysql_query("SELECT * FROM sites, clicks WHERE clicks.byuserid != '$uid' and sites.userid != '$uid' and sites.active = '1' ORDER BY sites.weight DESC, sites.id DESC LIMIT 1") or die (mysql_error()); 
if(mysql_num_rows($qrys)!=0){ 
    while($row = mysql_fetch_object($qrys)){ 
    $title = $row->title; 
    $siteurl = $row->siteurl; 
    echo "$title $siteurl"; 
    } 
} else { 
echo "No more sites"; 
} 

沒有錯誤,但無論我嘗試的結果是沒有更多的網站!如何正確加入此查詢?

+2

我想任何事情之前解決您的SQL注入漏洞。 – gpojd

+0

@gpojd它*是一個JOIN,只是因爲它沒有使用關鍵字'JOIN'並不意味着它不是。 –

+0

我完全忽略了第二個查詢中的連接。我不久前編輯了我的回覆,刪除了評論的這一部分。 – gpojd

回答

1

您可能希望這樣的查詢:

SELECT [the columns you need] 
FROM sites 
LEFT JOIN clicks ON clicks.siteid = sites.id 
    AND clicks.byuserid = [current user id] 
WHERE sites.active = 1 AND clicks.id IS NULL 
ORDER BY sites.weight DESC, sites.id DESC 
LIMIT 1 

正如gpojd上面提到的,你必須必須必須在淨化你的投入在查詢中使用它們。解決第一個查詢的代碼:

$qrym = mysql_query("SELECT * FROM `users` 
    WHERE username='" . mysql_real_escape_string($username) . "' LIMIT 1"); 
+0

TehSrike,謝謝你非常好,這個作品很好:D – Ado

2

也許做

while($row = mysql_fetch_object($qrym)){ 
    $uid = $row->id; 

,而不是

while($mem = mysql_fetch_object($qrym)){ 
    $uid = $row->id; 
+0

方法來發現他可能還沒有注意到的錯誤:-) – TehShrike

+0

LOL我今天重做了這麼多次,我變得完全失明瞭...... – Ado

0

獲取當只有一行,爲你的第一個查詢做,也絕對不需要一個while()循環檢索數據。

也就是說,並觀察代碼塊的註釋:

$qrym = mysql_query("SELECT * FROM `users` WHERE username='$username' LIMIT 1") or die (mysql_error()); 
while($mem = mysql_fetch_object($qrym)){ 
     ^^^--- you fetch into $mem 
    $uid = $row->id; 
      ^^^--- but try to retrieve from $row? 
} 

試試這個:

$sql = "SELECT ..."; 
$qrym = mysql_query($sql) or die(mysql_error()); 
$row = mysql_fetch_assoc($qrym); 
$uid = $row['uid']; 
+0

I我實際上會在那裏獲取更多的細節。謝謝Marc。 – Ado