我有一个表,如下所示
Ads Table
user_id ad_id title message repost_days_id repost_times_id
1 1 Message Title 1 Message 1 1
1 1 Message Title 2 Message 0 0
Repost Days Table:
repost_days_id Value
1 5
Repost Times Table:
Repost_times_id value
1 10现在,我想查询ads表,以显示包含广告标题、广告消息、转发天数和转发次数的广告。例如,对于广告1,它将是
Message Title 1
Message Repost Days=10
Repost Times=5.我该如何为它编写sql语句呢?这就是我所做的,没有显示任何结果。
$q = "
select
a.ad_id,
a.title,
a.message,
rt.value,
rd.value,
from
ad_repost_times rt,
ad_repost_days rd,
ads a
where
a.user_id='{$_SESSION['user_id']}'
and rt.repost_times_id=a.repost_times_id
and rd.repost_days_id=a.repost_days_id
";发布于 2011-05-23 21:39:53
查询无法满足a.user_id='{$_SESSION['user_id']}'条件,因为ads表中没有user_id字段。
发布于 2011-05-23 21:55:20
a.user_id='{$_SESSION['user_id']}'意味着当你在SQL查询中提交你的用户id时,你的用户id周围会有一个大括号。如果$_SESSION['user_id']包含整数1234,那么您的查询将类似于a.user_id='{1234}'。(请注意,如果您在整个代码中都犯了相同的错误,那么这个“错误”实际上可能不是问题的原因。)a.user_id='{$_SESSION['user_id']}',并将其更改为与a.user_id=?的参数绑定,以避免SQL注入攻击(同时也巧合地消除了导致问题#2的输入错误)。repost_days_id中的默认值0,repost_times_id您需要使用LEFT JOIN,如下所示:$q =“select a.ad_id,a.title,a.message,rt.value,rd.value from ads a LEFT JOIN ad_repost_times rt ON rt.repost_times_id=a.repost_times_id LEFT JOIN ad_repost_days rd ON rd.repost_days_id=a.repost_days_id a.user_id=‘{$_SESSION’‘user_id’}‘";
对于id为0的行,rt.value和rd.value的结果将为null。
注意,我已经对表进行了重新排序(ads a需要放在第一位,否则您需要在某些地方使用RIGHT JOIN而不是LEFT JOIN),并且表名之间不应该再有逗号。(LEFT JOIN代替逗号)。
发布于 2011-05-23 21:36:15
此查询执行时是否没有任何错误?
从您的表结构来看,Ads表似乎没有字段user_id,您正在对其进行查询
https://stackoverflow.com/questions/6097900
复制相似问题