我是PHP和MYSQL的新手。我知道我应该使用MYSQLI,但在这种情况下我没有这个选项,所以请耐心等待我!
我的MYSQL数据库中有三个表,如下所示:
表A 用户ID |主题|日期|评价
表B 用户ID |用户名|用户电子邮件
表C 主题|描述
然后我的PHP页面上有一个表格,显示TableA中的信息,每行都有一个“详细信息”按钮。
我想要做的是,如果单击“详细信息”按钮,则表B&的组合信息。根据该行中的主题显示C.
例如。下图显示了页面上的表格,如果单击主题2行中的按钮,则会显示第二个表格,其中包含选择topic2的所有用户的列表。
|主题|用户ID |日期|详细信息|
| 2 | 01 | 11-11-2012 | 按钮 |
| 3 | 02 | 12-11-2012 | 按钮 |
| 2 | 03 | 11-01-2012 | 按钮 |
| 5 | 04 | 11-08-2012 | 按钮 |
单击第一行中的按钮时:
|用户ID |用户名| Useremail |主题|
| 01 | name01 | usermail 1 | 主题说明 |
| 03 | name03 | usermail 3 | 主题说明 |
我对第一个表格的编码如下:
$query = mysql_query("SELECT * FROM course ORDER BY cname") or die ("error");
echo '</br><h4 align="center"> Listing </h4></br>';
echo'<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
<table border="1" width="50%" align="center">
<tr>
<td>
<h4>Topic</h4>
</td>
<td>
<h4>UserID</h4>
</td>
<td>
<h4>Details</h4>
</td>
</tr>';
while ($row=mysql_fetch_array($query))
{
echo'<tr>
<td>
'.$row['topic'].'
</td>
<td>
<form action="'.$_SERVER['PHP_SELF'].'" method="post">
'.$row['Description'].'
</td>
<td>
<align="center">
<input type="submit" name="list" value=" button" />
</form>
</td>
</tr>';
}
拜托,有人可以帮助我接下来要做什么吗?
我知道我应该使用连接,但不确定是哪一个或如何。 按钮必须以某种方式知道它们在哪一行,以便知道必须显示哪些主题信息,但我不知道如何实现它。
答案 0 :(得分:0)
对不起,但我不能完全理解你在问什么,也不知道这些表是如何彼此特别相关的。我假设表B是用户数据库表,表A就像一个主题数据库表,我也假设TAble C是对表A的评论。这种关系是否正确? (我将编辑这篇文章,因为我会更清楚地了解到底发生了什么)。
编辑1:这就是你在谈论的吗?正如我已经评论过的那样,我不明白第三个表的用法是什么?
$sql = "SELECT * FROM table_a WHERE Topic=10";
$ans = mysql_query($sql) or die(mysql_error())
while($result = mysql_fetch_assoc($ans)){
}
mysql_free_result($ans)
编辑2:为了加快这种交流速度,我将简要介绍一下我对连接表的了解。
有多种方法可以从多个表中选择数据,并且您使用哪种方法最适合您的目的。
假设我们有以下表格设置:
Users : user_id, username, user_email
Topics: topic_id, user_id, topic_title, topic_text
Posts: post_id, topic_id, user_id, post_text
这是PhpBB的设置,我经常处理。第一个表很简单,它是用户信息表,存储有关用户的所有信息。第二个是发布的主题列表,仅列出标题的基本信息以及发布的标题。第三个,也是重要的一个,是除了原始主题之外的所有主题的帖子。例如。标题为“谁将在战斗中胜出......”的主题与“超人或蝙蝠侠”的文字只会在topic_title中的“谁将在战斗中胜出......”和topic_text中的“超人或蝙蝠侠”中,而对“蝙蝠侠”这个主题的第一个评论将在帖子表中。
现在,假设我在我的论坛板上,所以我想看到所有主题,以决定我应该发布的位置。这是通过
完成的$sql = "SELECT t.*,u.username FROM topics t, users u WHERE u.user_id=t.user_id";
$ans = mysql_query($sql);
while($result = mysql_fetch_assoc($ans)){
echo $result['topic_title'].' | '.$result['username'].'<br />';
}
这是连接表的最基本版本。它表示我将从主题和用户的用户名中选择所有内容,其中users表上的user_id列与主题表中的user_id列相同。还有另一种方法可以写这个,但现在让我们专注于基础知识。
这会给你这样的结果
Who would win in a fight... | Bob123
If you could go anywhere in the world | Jose567
Where is the most awkward place you've ever sneezed | Sneezerella
我没有将代码放入以使标题可点击,但假设您了解HTML,这应该不难。所以现在假设我们点击了其中一个链接,它应该看起来类似于
<a href="viewtopic.php?t=1">Who would win in a fight...</a>
所以,我们现在在viewtopic.php上,传递一个参数,t。然后我们会采取这样的方式:
//Assuming connections somewhere up here
$sql = "SELECT t.*,u.username FROM topics t, users u WHERE u.user_id=t.topic_id AND t.topic_id=".$_GET['t']; //This should look familiar, also remember to sanitize your MySQL data, don't just tack it on straight from the $_GET variable like I did. I'm typing this while dealing with my 8 month old
$ans = mysql_query($sql) or die(mysql_error());
$first_post = mysql_fetch_assoc($ans);
echo first_post['topic_title'].'-'.$first_post['username'].'<br /> '.$first_post['topic_text'].' <hr />';
//Outputs something like "Who would win in a fight... - Bob123 <br /> Superman or Batman?
mysql_free_result($ans);
//Gotten the first post and everything else, now to see the comments.
$sql = "SELECT p.*,u.username FROM posts p, users u WHERE u.user_id=p.user_id AND p.topic_id = ".$_GET['t'];
$ans = mysql_query($sql) or die(mysql_error())
while($result = mysql_fetch_assoc($ans)){
echo $result['username'].' <br />'.$result['post_text'].'<hr />';
}
//This will output something like Sneezerella <br /> Batman <hr /> Bob123 <br /> Superman <hr /> ....[etc]....
mysql_free_result($ans)
还有一段时间你必须使用LEFT JOIN,RIGHT JOIN和/或INNER JOIN语句。根据我的解释,这里有差异
我希望这有帮助,如果你有任何进一步的问题,不要害怕问。