好的,现在它的显示结果连续3次
$user_apps = mysql_query("SELECT a.name,a.download_url FROM user_apps as ua LEFT JOIN
apps as a ON (ua.app_id=a.app_id)
WHERE ua.user_id='$user_id'") or die(mysql_error());
while($raw = mysql_fetch_array($user_apps)){
$name = $raw['name'];
$url = $raw['download_url'];
echo $name;
echo "<br />";
echo $url;
}
数据库表结构(因为我是网站新手,不知道如何显示我刚刚导出sql的表结构)
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
CREATE TABLE IF NOT EXISTS `user_apps` (
`user_id` int(11) NOT NULL,
`app_id` int(11) NOT NULL,
KEY `user_id` (`user_id`,`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `apps` (
`app_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`description` text NOT NULL,
`icon` varchar(255) NOT NULL,
`download_url` varchar(255) NOT NULL,
`default` int(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
我尝试了不同的加入类型,但这似乎不起作用。
答案 0 :(得分:1)
使用连接查询获取结果检查以下示例查询
$user_apps = mysql_query("SELECT DISTINCT a.name,a.download_url FROM user_apps as ua LEFT JOIN apps as a ON (ua.app_id=a.app_id) WHERE ua.user_id='$user_id'") or die(mysql_error());
while($raw = mysql_fetch_array($user_apps)){
$name = $raw['name'];
$url = $raw['download_url'];
echo $name;
echo $url;
}
根据您的要求更改联接类型。以上查询仅用于示例
INNER JOIN:当BOTH中至少有一个匹配时返回所有行 表
LEFT JOIN:返回左表中的所有行以及匹配的行 从右表
RIGHT JOIN:返回右表中的所有行,并匹配 左表中的行
FULL JOIN:当其中一个表中有匹配时返回所有行
有关加入click here 的详情 并检查此http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
答案 1 :(得分:0)
您在user_id
='$ user_id'的查询中使用过单引号。
你确定你的user_id是char,varchar还是text?只需print_r($ user_apps)并检查它是否有任何记录?如果user_id是int,则小于删除单引号。