如何显示用户的id表和另一个?

时间:2015-01-09 13:46:08

标签: java mysql sql database jsp

我正在建立一个论坛,现在我已经有了这张桌子。请看这里:

此表适用于用户:

create table if not exists login_system(
user_id INT NOT NULL auto_increment,
email VARCHAR(100) NOT NULL,
password VARCHAR(100) NOT NULL,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
gender VARCHAR(50) NOT NULL,
about_yourself VARCHAR(150) NOT NULL,
my_website VARCHAR(100000) NOT NULL,
PRIMARY KEY(user_id)
);

此表适用于问题:

create table if not exists thread_question(
question_id INT NOT NULL auto_increment,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
question_title VARCHAR(500) NOT NULL,
question VARCHAR(100000) NOT NULL,
question_dateTime VARCHAR(100) NOT NULL,
PRIMARY KEY(question_id)
);

我想展示user's link如果他/她发布了他/她的问题。它必须假设在悬停在人员姓名后提供链接。这样其他人就可以看到他/她的个人资料信息。

我可以通过以下方式简单地提取一些问题进入论坛:

<%
try{
        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/forum", "root", "1234");
        Statement st=con.createStatement();
        ResultSet rs=st.executeQuery("select * from thread_question where question_id="+question_id);
            while(rs.next()){

                String first_name=rs.getString("first_name");
                String last_name=rs.getString("last_name");
                String thread_title=rs.getString("question_title");
                String thread_question=rs.getString("question");
                String thread_dateTime=rs.getString("question_dateTime");

...
...
...
%>

现在我希望显示login_system's table以及question's table你很清楚我们不能在这里创建两个语句。所以请帮助..我想从user_id表格中获取login_system,我可以通过点击链接轻松显示他/她的个人资料。你能帮我么?怎么做?

3 个答案:

答案 0 :(得分:1)

您的方法存在各种问题。首先,如评论所述,您不应将连接代码直接放入JSP中。其次,由于SQL注入的风险,您不应通过连接字符串来创建语句。确保您了解其含义并改为使用PreparedStatement

要最终回答您的问题,而不是在thread_question表中使用名字和姓,您应该在login_system表中使用id的外键,然后在SQL中使用连接声明。如果我在这里粘贴逐字解决方案,我想这对你没什么帮助。

答案 1 :(得分:1)

首先遵循horse_with_no_name的建议,出于安全原因,不要将SQL代码放入JSP页面。

另外请修改你的语法/拼写,因为很难阅读你的问题。

另一件事是你想要阅读关于规范化数据库结构http://en.wikipedia.org/wiki/Database_normalization

的内容

我很清楚,如果你愿意,你可以创建多个sql语句,它只是另一个连接,但在这种情况下你不需要(大多数情况下)

将thread_question表更改为此

create table if not exists thread_question(

    question_id INT NOT NULL auto_increment,
    user_id id INT NOT NULL,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    question_title VARCHAR(500) NOT NULL,
    question VARCHAR(100000) NOT NULL,
    question_dateTime VARCHAR(100) NOT NULL,
    PRIMARY KEY(question_id)
    );

看起来你想要的SQL是这样的吗?

SELECT 
LS.FIRST_NAME,
LS.LAST_NAME,
TQ.question_title,
TQ.question,
TQ.question_dateTime
FROM
login_system as LS
JOIN thread_question as TQ ON
LS.user_id = TQ.user_id

答案 2 :(得分:1)

关注Shifty解决方案,如果您不想加入该表,那么还有一个解决方案,即   1.向您查询您的thread_question并获取数据。   2.当您准备页面并提供userLink时,您必须在javascript中附加悬停事件,其中userid作为输入并触发ajax调用以获取用户相关数据并使用此数据。