我真的需要你的帮助。请帮我解决这个问题。
我有这两个表,它们之间的relation
是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);
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
答案 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张照片。按日期订购。
希望这对你有所帮助。