我有这个查询工作得很好,但是我想改变我的数据库表一点,所以我需要改变我的查询一点点。我的工作的查询是这样的:MYSQL从数据库中的其他表中选择,匹配数据等
$notificationsq = mysql_query("
SELECT
N.*,
P.*,
MAX(N.date) AS newDate
FROM
notifications N,
posts P
WHERE
N.userID='$session'
AND
(
(
N.action='1'
AND
(N.state = 0 OR N.state=1)
)
OR
N.action='2'
)
AND P.state='0'
AND
N.uniqueID=P.id
GROUP BY
N.uniqueID
ORDER BY
N.state ASC,
newDate DESC
") or die(mysql_error());
现在,我在做什么正在改变行“UNIQUEID”,所以我需要做的基本上是:
if(action==2){unqiqueID=C.postID} else {uniqueID=N.uniqueID}
这里是我的表结构: i41.tinypic.com/nyzolg.png
的信息从照片是:
Table: Notifications
id UserID FromID UniqueID Action State Read_Date Date
1 1 2 1 1 0 0 1325993600
2 1 6 2 1 0 0 1325993615
3 1 2 1 2 0 0 1325993622
4 1 6 2 2 0 0 1325993661
5 2 6 2 2 0 0 1325993661
Action = 1表示UniqueID标识Posts中的一行; Action = 2表示UniqueID标识评论中的一行。
Table: Posts
id ToID FromID Post State Date
1 1 2 Hey 0 1325993600
2 1 6 okay yeah 0 1325993615
Table: Comments
ID PostID FromID Comment State Date
1 1 2 lol 0 1325993622
2 1 6 ohh 0 1325993661
因此,在操作为2的通知表中,UniqueID是针对注释表中的'id'的。 我想回的是帖子ID,所以在查询这纯粹是因为如果是的UniqueID这个:
1
2
1
1
1
但是,在动作为1
谢谢,您能否使用我的代码将某些东西放在一起以向我展示您的意思?这将是非常感谢。 – 2012-01-08 00:54:13
@DylanCross:说实话,您的查询目前对我来说没有什么意义。我可以看到,您正在尝试使用'C.postID'或'N.uniqueID'来匹配'P.id',具体取决于特定条件。这是让我最困惑的状况。你能解释一下你想做什么吗?我可能会提出一个不同的方法,但首先我想了解那里发生了什么。 – 2012-01-08 04:24:42
好吧,N.uniqueID是以前用来存储C.postID的地方。现在它是注释表中注释的唯一标识。这是一张照片。 http://i41.tinypic.com/nyzolg.png – 2012-01-08 04:34:40