2012-05-01 70 views
0

我有兩個表爲用戶;登錄表和用戶配置文件表。如何從第二個表中獲取會話值?

我想將'userprofiletable'中的值與另一個名爲posts的表中的另一個值進行比較。如果值相等,則顯示一個列表。

我有以下代碼。問題在於它沒有將posts表中的值與用戶配置文件表中的會話值進行比較。

有人可以幫我嗎?

<?php 
$limit = '5'; 
$dbreq = 'SELECT * FROM `posts` ORDER BY `pos` DESC'; 
$dbdata = mysql_query($dbreq); 
while($dbval = mysql_fetch_array($dbdata)) 
{ 
    if (($dbval['city'] == $_SESSION['student_city'])) { //checks for last 4 accomodation 
    if ($limit >= '1') { 
     echo '<tr><td><a href="acomod.php?view='.$dbval['id'].'">'.$dbval['title'].'</a></td></tr>'; 
     $limit = $limit -'1'; 
    } 
    } 
} 
?> 

我也想獲得userprofiletable的值並將其張貼在posts表中。例如,有人發佈新帖子。

回答

0

您的文章是有點不清楚,但我認爲這是你想要什麼:

<?php 
$userid = 11542;//Sample uid. You will have to figure this out and set it. 
$limit = 5; 
$dbreq = "SELECT * FROM `posts` WHERE `userid`=".$userid." ORDER BY `pos` DESC LIMIT=".$limit.";"; 
$dbdata = mysql_query($dbreq); 
while($dbval = mysql_fetch_array($dbdata)) 
{ 
    if (($dbval['city'] == $_SESSION['student_city'])) { //checks for last 4 accomodation 
    echo '<tr><td><a href="acomod.php?view='.$dbval['id'].'">'.$dbval['title'].'</a></td></tr>'; 
    } 
} 
?> 
+0

的問題是沒有得到$ _SESSION [「student_city」])比較 –

+0

所以'student_city'被保存在數據庫中,而不是在會話中? –

+0

我的代碼已經在city和student_city在同一個表格中的情況下工作了,但是現在他們在不同的表格中並且不工作,那就是問題 –

0

的問題是不明確的,但也可能有兩個答案:

要重現你的代碼,你可以在一個SQL查詢做:

$dbreq = 'SELECT * 
FROM `posts` 
WHERE city="'.mysql_real_escape_string($_SESSION['student_city']).'" 
ORDER BY `pos` DESC 
LIMIT 4'; 

但是,如果有兩個表,那麼你就需要「LEFT JOIN」職位錶鏈接到USERPROFILE表

$dbreq = 'SELECT p.*, u.* 
FROM posts p 
LEFT JOIN userprofiletable up ON p.UserID=up.UserID 
WHERE up.city="'.mysql_real_escape_string($_SESSION['student_city']).'" 
ORDER BY p.pos DESC 
LIMIT 4'; 

(用戶ID在上面的表格是在職位表userprofiletable兩個連接字段的名稱。)從數據庫

+0

我明白了,但在登錄表中我有ID(userid),並且在userprofiletable中我也有ID(userid)(這些都是鏈接的),並且在帖子表中我也有id,但是它的id是與autoincrement ,我沒有在帖子表中的用戶ID,所以如果我的用戶名稱被稱爲ID和我已經在帖子表中的一個ID(帖子ID)我怎麼做? –

+0

只需將「p.UserID」更改爲p.TheNameOfTheFieldContainingTheUserID在「posts」表中,然後up.TheNameOfTheFieldContaininingUserID在「userprofile」表中。 – Robbie

+0

如果你想從兩個表中獲取字段:SELECT p.OneFieldFromPostTable,p.AnotherFieldFromPostTable,up.FieldFromUserProfileTable等 如果字段名衝突,然後a)重命名它們(這是您的「主鍵」的壞習慣所謂的「ID」,因爲你最終會產生這種混亂 - 重命名爲user_id user _id,然後在posts表中重複使用相同的字段名稱,然後重命名post_id作爲posts表。 但是,如果你必須有那麼,「選擇p.ID作爲PostID,up.ID作爲UserProfileID」,那麼,你的返回數組,$ dbval ['PostID']將是第一個,而$ dbval ['UserProfileID'] – Robbie

相關問題