从另一个表中选择日期

时间:2013-08-08 14:10:52

标签: mysql php

我真的需要你的帮助。请帮我解决这个问题。

我有这两个表,它们之间的relationuser_id。我完成了选择我关注的人并将他们的图像显示在我的墙上。但是,我有这个奇怪的问题:照片按照我想要的DESC排序,但它们按user_id排序。这意味着无论我先跟随谁,他们的图像都会先按DESC排序。

我尝试了几乎所有可能的方法,根据DESC最新照片作为顶部对照片进行排序,但我做不到。这是我的表格,我会告诉你我尝试的每一件事:

CREATE TABLE IF NOT EXISTS `photos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `img` varchar(255) NOT NULL,
  `about` text NOT NULL,
  `date` varchar(222) NOT NULL,
  `user_id` varchar(255) NOT NULL,
  `likes` int(255) NOT NULL,
  `down` int(255) NOT NULL,
  PRIMARY KEY (`id`)
) ;

CREATE TABLE IF NOT EXISTS `follow` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `followers` varchar(255) NOT NULL,
  `following` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
}

followers_photo.php,我从中检索following id

$the_user = mysql_query("SELECT * FROM users WHERE username = '$getuser'");
$tuser=mysql_fetch_array($the_user);
$tu_id = $tuser['id'];

$followers = mysql_query("SELECT distinct follow.*    
 FROM follow JOIN photos ON (follow.followers  = $tu_id)
order by photos.date DESC");
$f_s_count = mysql_num_rows($followers);    
  • index.php我在这里显示图像。
  

while($ uim = mysql_fetch_assoc($ followers)){$ i_id =   $ UIM [ '以下']; $ followers_image = mysql_query(“SELECT distinct   照片。*来自照片JOIN跟随ON(photos.user_id = $ i_id)GROUP   BY RAND()按日期排序DESC“);


以上是有效的,但正如我所提到的,它根据日期DESC和我不想要的user_id对图像进行排序。我希望它停止根据user_id

对图像进行排序

两个

followers_photo.php

    $the_user = mysql_query("SELECT * FROM users WHERE username = '$getuser'");
$tuser=mysql_fetch_array($the_user);
$isuser = mysql_num_rows($the_user);

$tu_id = $tuser['id'];
$tu_name =$tuser ['username'];
////users whos following Me
$followers = mysql_query(" SELECT distinct follow.* FROM photos join  follow on  follow.followers = photos.user_id WHERE follow.followers = $tu_id order by photos.date DESC");
//
$f_s_count = mysql_num_rows($followers);

index.php

    while($uim = mysql_fetch_assoc($followers)){
$i_id = $uim['following'];
$followers_image = mysql_query("SELECT * FROM photos  WHERE user_id = '$i_id' order by date DESC ");

以上与第一步相同。谁能指出我正确的方法?根据{{​​1}}对我关注的人进行排序,其中帖子排在最后。谢谢你们,我非常感谢你们的帮助。抱歉我的英语不好。

更新

现在有了vegatripy给出的解决方案,图像是重复的,而不是按照需要订购。 左边是现在显示的内容。我想要的是排序为正确的形象。有任何想法吗? http://i.stack.imgur.com/Cod6z.jpg

解决

date DESC

1 个答案:

答案 0 :(得分:3)

您将JOIN与句子中缺少的WHERE条款混合在一起(这就是您使用DISTINCT的原因,因为没有加入条件完全没有你重复的行)

$followers = mysql_query("SELECT distinct follow.*    
 FROM follow JOIN photos ON (follow.followers  = $tu_id)
order by photos.date DESC");

相当于:

$followers = mysql_query("SELECT distinct follow.*
FROM follow, photos WHERE (follow.followers  = $tu_id)
order by photos.date DESC");

该加入为您提供整个笛卡尔积(FROM follow JOIN photos),其中列follow.followers = $tu_id,其中包含真正加入“follow”和“photos”表之间的行。要丢弃行,您需要在加入代码之后使用where子句。

无论如何,你正在混合一些东西。我已经多次分析过您的代码,当您选择列并使用其中一个的where条件时,我不明白为什么要将“照片”与“跟随”表联系起来。

我将举一个你想要做的事情的例子。只是SQL有意义的东西。我会把PHP给你。 这些是表USERS,PHOTO和FOLLOW

USERS:
ID      USERNAME
--      --------
01      John
02      Smith
03      Rambo

PHOTO: (just the relevant columns)
ID      IMG     DATE            USER_ID  
--      -----   -----------     ------- 
01      a.jpg   01-02-2013      03  (Rambo)
02      b.jpg   30-07-2013      03  (Rambo)
03      c.jpg   04-04-2012      02  (Smith)
04      d.jog   04-04-2013      01  (John)

FOLLOW:
ID      FOLLOWERS   FOLLOWING
--      --          --
01      01          02      (John is following Smith)
02      01          03      (John is following Rambo)
03      02          01      (Smith is following John)
04      03          01      (Rambo is following John)
05      02          03      (Smith is following Rambo)

通过此设置,我们希望显示来自给定用户名的用户的图像,按照图像的日期排序。 所以,给定的用户名是“John”。那是ID“01”。 如果我们只需要约翰所关注的人的图像,那么:

SELECT PHOTO.IMG 
FROM FOLLOW JOIN PHOTO ON (PHOTO.USER_ID = FOLLOW.FOLLOWING) 
WHERE FOLLOW.FOLLOWERS = 01
ORDER BY PHOTO.DATE DESC;

我们正在加入“Photo.User_ID”和“Follow.following”,按日期排序desc。这将构成一个临时表:

PHOTO.ID    PHOTO.IMG   PHOTO.DATE  PHOTO.USER_ID   FOLLOW.ID   FOLLOW.FOLLOWERS    FOLLOW.FOLLOWING
--          -----       ----------  -------         --          --                  --
02          b.jpg       30-07-2013  03  (Rambo)     02          01                  03      (John is following Rambo)
04          d.jog       04-04-2013  01  (John)      04          03                  01      (Rambo is following John)
04          d.jog       04-04-2013  01  (John)      03          02                  01      (Smith is following John)
01          a.jpg       01-02-2013  03  (Rambo)     02          01                  03      (John is following Rambo)
03          c.jpg       04-04-2012  02  (Smith)     01          01                  02      (John is following Smith)

然后WHERE子句将仅选择跟随者是我们想要的user_id的那些行(01)。这是:

PHOTO.ID    PHOTO.IMG   PHOTO.DATE  PHOTO.USER_ID   FOLLOW.ID   FOLLOW.FOLLOWERS    FOLLOW.FOLLOWING
--          -----       ----------  -------         --          --                  --
02          b.jpg       30-07-2013  03  (Rambo)     02          01                  03      (John is following Rambo)
01          a.jpg       01-02-2013  03  (Rambo)     02          01                  03      (John is following Rambo)
03          c.jpg       04-04-2012  02  (Smith)     01          01                  02      (John is following Smith)

约翰,我们将看到兰博的2张照片和史密斯的1张照片。按日期订购。

希望这对你有所帮助。