我需要帮助,因为我看不出为什么这不起作用的原因。
我有一个mysql查询,它选择ptb_reviews
和ptb_profiles
表中的所有项目。
我已将ptb_reviews.from_user_id
设为等于ptb_profiles.user_id
所以现在我想要回应display_name
中user_id
的{{1}} ptb_profiles
等于from_user_id
中的ptb_reviews
。
然而,它不会显示display_name
,唯一可行的方法是,如果我回显from_user_id
,它会给我用户编号而不是名称。
我的ptb_reviews
表格如下:
id | from_user_id | to_user_id | content |
1 2 5 hello
2 5 6 hi
3 -1 6 hello
我的'ptb_profiles'表格如下所示:
id | user_id | display_name |
1 2 jack
2 5 lisa
这是我的mysql查询:
function get_reviews() {
global $connection;
global $profile_id;
$query = "SELECT *
FROM ptb_reviews, ptb_profiles
WHERE ptb_reviews.to_user_id = \"$profile_id\"
AND ptb_reviews.deleted ='0'
AND ptb_reviews.approved = '1'
AND ptb_reviews.from_user_id = '-1'
OR ptb_reviews.from_user_id = ptb_profiles.user_id
GROUP BY ptb_reviews.content
ORDER BY ptb_reviews.date_added DESC
LIMIT 5";
$reviews_set = mysql_query($query, $connection);
confirm_query($query, $connection);
return $reviews_set;
}
PHP:
<?php $reviews_set = get_reviews();
if(mysql_num_rows($reviews_set) > 0) {
while ($reviews = mysql_fetch_array($reviews_set)) { ?>
<?php echo "{$reviews['display_name']}"; ?>
有人可以告诉我我哪里出错了,因为我无法理解。
谢谢
答案 0 :(得分:0)
首先,不使用“隐式联接”(select * from table1, table2 where table1.aField = table2.aField
);使用显式连接:select * from table1 inner join table2 on table1.aField = table2.aField
。
我建议采取一些简单的步骤来确保你得到你想要的东西。在PHP项目中实现之前,请尝试在MySQL控制台(或Workbench或其他界面)中执行的所有操作。
使用适当的过滤器为单个to_user_id
返回表格中的所有行应该很容易。
select
*
from
ptb_reviews as r
inner join ptb_profiles as p on r.from_user_id = p.userId
where
r.deleted = '0'
r.approved = '1'
order by
r.date_added desc
limit 5
如果此方法有效,请开始添加所需的where
条件。一个接一个地尝试它们,当你得到你需要的东西时,把它放在你的PHP项目中