mysql - 从另一个表中选择日期

标签 mysql php

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

我有这两个表,它们之间的关系user_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['following']; $followers_image = mysql_query("SELECT distinct photos.* FROM photos JOIN follow ON (photos.user_id = $i_id) GROUP BY RAND() order by date 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);

索引.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 ");

上面的操作与第一步相同。谁能指出我正确的方法?根据 date DESC 对我关注的人的照片进行排序,最后发布的人优先。谢谢你们,非常感谢你们的帮助。抱歉我的英语不好。

更新

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

已解决

    $followers = mysql_query("SELECT PHOTOs.IMG, follow.followers, follow.following, photos.date,photos.img,photos.likes,photos.down,photos.id,photos.about
FROM FOLLOW
JOIN PHOTOs ON ( PHOTOs.USER_ID = FOLLOW.FOLLOWING ) 
WHERE FOLLOW.FOLLOWERS =31
ORDER BY PHOTOs.DATE DESC");
$f_s_count = mysql_num_rows($followers);
while($fimage = mysql_fetch_assoc($followers)){
$i_id = $fimage['following'];
$disimg = $fimage['img'];
$disid = $fimage['id'];
$distime = $fimage['date'];
$i_like=$fimage['likes'];
$i_unlike=$fimage['down'];

最佳答案

您在句子中混合了 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 列,其中不包括真正 连接“关注”和“照片”表之间的行。要丢弃行,您需要 join 条件 之后的 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”。 如果我们只需要 John 关注的人的图像,那么:

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”,按日期降序排列。这将创建一个像这样的临时表:

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 子句将只选择 follower 是我们想要的 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)

因此,作为 John,我们将看到 2 张来自 Rambo 的照片和 1 张来自 Smith 的照片。按日期排序。

希望对你有帮助。

关于mysql - 从另一个表中选择日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136175/

相关文章:

php - 如何让我的 CMS 自行升级?

mysql - 在 WHERE 之前应用 DISTINCT

java - 连接池中的最佳连接数

数据库;来自不同类别的列表

php - 重定向到下一个/路由操作,而不是用户登录/注册后的最后一个 symfony security

php - 通过 phpMyAdmin 执行 MySql #1243 错误

php - cakephp:构造数据库数据返回

php - 使用 bash 或 php 获取文件夹层次结构

mysql - (1054) 'field list' 中的未知列 - Mysql 错误

php - mysql子查询问题