2013-05-04 100 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

相关问题