2013-05-04 96 views
0

我想創建一個活動供稿系統,我的供稿(狀態)和朋友在我的數據庫的不同表格中。如何連接它們以便登錄的用戶只能接收來自其朋友的提要。使用兩個表。我在這裏做錯了什麼?

<?php 
$sql = " 
SELECT * FROM status WHERE author='(friend of logged-in user)' AND type='a' 
**UNION** 
SELECT * FROM friends WHERE user1='$user' AND accepted='1' OR user2='$user' AND accepted='1' 
"; 
$query = mysqli_query($database, $sql); 
$statusnumrows = mysqli_num_rows($query); 
while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
    $user1 = $row["user1"]; 
    $user2 = $row["user2"]; 
    $accepted = $row["accepted"]; 
    $statusid = $row["id"]; 
    $account_name = $row["account_name"]; 
    $author = $row["author"]; 
    $postdate = $row["postdate"]; 
    $postdate = strftime("%b %d, %Y %I:%M %p"); 
    $data = $row["data"]; 
    $data = nl2br($data); 
    $data = str_replace("&amp;","&",$data); 
    $data = stripslashes($data); 
    $statusDeleteButton = ''; 
    if($author == $log_username || $account_name == $log_username){ 
     $statusDeleteButton = '<span id="sdb_'.$statusid.'"><a href="#" onclick="return false;" onmousedown="deleteStatus(\''.$statusid.'\',\'status_'.$statusid.'\');" title="DELETE THIS STATUS AND ITS REPLIES">delete status</a></span> &nbsp; &nbsp;'; 
    } 

    $feedlist .= '<div id="status_'.$statusid.'" class="flipwrapper pin"> 
     <div class="picture"> 
     <header class="img-btm"> 
      '.$postdate.'</b><br /> 
      20 <a href="#">cmts</a>&nbsp;255 <a href="#">likes</a>&nbsp; '.$statusDeleteButton.' 
     </header> 
     <a href="status_frame.php?id='.$statusid.'"><img id="bound" src="'.$data.'"/></a></div></div>'; 
} 
?> 
+0

我們不知道你的表是什麼樣的。而且你應該更多地指出麻煩的地方(它似乎與SQL相關,而不是PHP)。 – Jesse 2013-05-04 00:33:34

回答

1

你肯定不想在這裏聯合,而是一個子查詢,或多或少是這樣的:

SELECT * FROM status 
WHERE author in (
     SELECT whateverfieldshouldmapfromfriendstoauthor FROM friends 
     WHERE user1='$user' AND accepted='1' OR user2='$user' AND accepted='1' 
    ) AND type='a' 

還有一些一般提示:

  • 開發你的查詢直你的腳本語言(在這種情況下,PHP)是一個非常糟糕的主意。使用一種工具可以開發查詢,運行它們並檢查結果集。有很多這樣的,如MySQL自己的WorkbenchSquirrel SQL
  • 要非常小心SQL注入問題(如果您的$user變量由請求提供,您是)。避免SQL注入問題的最佳方法是使用parameterized queries
+0

首先,謝謝!我正在測試中。不過,我得到一個錯誤,指出: 警告:mysqli_num_rows()預計參數1被mysqli_result,布爾在C中給出:... \在線home.php 32 警告:mysqli_fetch_array()預計參數1是mysqli_result,在C:... \ home.php中給出的布爾值,第33行 這些行是說: $ statusnumrows = mysqli_num_rows($ query); 而($行= mysqli_fetch_array($查詢,MYSQLI_ASSOC)){ 我迷路了,至於什麼在 WHERE筆者在( SELECT [這裏]朋友再次 \t \t 謝謝! – sienna 2013-05-04 00:28:50

+0

它插入可能首先將子查詢分別作爲SELECT * FROM friends WHERE user1 ='$ user'AND accepted ='1'或user2 ='$ user'來運行, AND accepted ='1'',應該很明顯,哪一列包含你想要查找狀態'author column'的值 – fvu 2013-05-04 01:01:02

+0

好吧,非常感謝你,順便說一句,我看不出來的最後一件事情是,我組合了兩個字段(user1和user2),因爲那些r表示好友請求發送者和接收者,以便登錄的用戶可以是任一個。所以代碼是:SELECT * FROM status WHERE author in( SELECT(user1 + user2)AS user3 FROM friends WHERE user1 ='$ log_username'AND accepted ='1'or user2 ='$ log_username'AND accepted =' 1' )AND type ='a' 「;(CONCAT不會爲我工作btw)無論如何,它一直給我所有用戶的飼料。我在做什麼錯? – sienna 2013-05-04 01:32:24

相關問題