PHP循环时出错了

时间:2014-12-23 05:34:48

标签: php mysql

好的,现在它的显示结果连续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 ;

我尝试了不同的加入类型,但这似乎不起作用。

2 个答案:

答案 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,则小于删除单引号。