2014-03-06 94 views
1

我有以下代码(你不需要知道太多的查询来获取我的问题):获取同一列两次,不同的价值

if ($stmt = $cxn->prepare('SELECT p.post_id, p.reply_to, p.parent_id, p.post_path, p.user_id, p.content, p.datetime, p.total_likes, p.total_replies, p.total_reposts, l.like_id, l.user_id, u.username, u.display_name 
     FROM posts p 
     LEFT JOIN users u ON p.user_id = u.user_id 
     LEFT JOIN likes l ON l.post_id = p.post_id 
     WHERE l.user_id IN 
      (SELECT user_id FROM likes WHERE user_id IN 
       (SELECT following_id FROM follows WHERE user_id = ? AND following_id != ?)) 
     AND l.user_id != p.user_id AND p.removed != 1 
     ORDER BY p.datetime DESC LIMIT 26')) { 
    $stmt->bind_param('ii', $id, $id); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->bind_result($post_id, $reply_to, $parent_id, $post_path, $user_id, $content, $datetime, $total_likes, $total_replies, $total_reposts, $like_id, $like_user_id, $username, $display_name); 
} 

现在,我有l.user_id值是用户的整数值。

我怎么会到这个查询,这样我可以从users表中获取的l.user_id的用户名时,我已经查询u.usernamep.user_id

谢谢!

+0

只需将该字段添加到查询中?我想我不了解你的问题。 –

+0

@MikeBrant我已经为'p.user_id'获得'u.username'。我也想获得'l.user_id'的用户名。怎么样? – Walter

+0

只需将'l.username'添加到您的查询中即可。 –

回答

1

您可以使用别名来实现这一目标,他们是为了在这样的情况下使用,例如

SELECT l.user_name as user, u.username as uname, .... 

从技术文档

SQL别名

  • SQL别名用于为数据库表或表中的列提供临时名称。

  • 基本上会创建别名以使列名更具可读性。

了解更多here

+0

我确信有比[w3fools](http://www.w3fools.com/) – kero

+0

更好的资源我仍然不确定这是如何帮助我的情况。 – Walter

+0

@Walter在你的情况'SELECT l.user_id作为LUserID,p.user_id作为PUserID'应该从2个表中获得用户id作为2个不同的cols。 – user2989408

0

试试这个

if ($stmt = $cxn->prepare('SELECT p.post_id, p.reply_to, p.parent_id, p.post_path, p.user_id, p.content, p.datetime, p.total_likes, p.total_replies, p.total_reposts, l.like_id, l.user_id, l.username as lusername , u.username, u.display_name 
    FROM posts p 
    .... 

编辑:

改变这种

LEFT JOIN likes l ON l.post_id = p.post_id 

LEFT JOIN likes l ON l.post_id = p.post_id AND l.user_id= u.user_id 
+0

无效。我需要做的是使用'l.user_id'(这来自喜欢的表),并从users表中获取用户名。 – Walter

+0

尝试更新答案。 –