2012-05-08 6 views
0

저는 현재 재미와 학습을 위해서 작은 웹 서비스를 만들고자합니다. (나는 최근에 실질적으로 프로그래밍을 배우기 시작했다.) 서비스는 트위터와 같다. 사용자가 친구를 팔로우하고 친구의 상태를 알 수 있습니다.twitter는 (는) 관계형 데이터베이스입니까?

관계형 데이터베이스에 대한 질문이 있습니다.

'user', 'friendship'및 'status'의 세 가지 테이블이 있습니다. 여기에 은 이러한 표의 모양을 설명하는 코드입니다.

create table user (
    id int unsigned auto_increment primary key, 
    username varchar(16) not null, 
    password varchar(255) not null, 
    created datetime default null 
    ); 

    create table friendship (
    id int unsigned auto_increment primary key, 
    userid int not null, 
    friend int not null, 
    created datetime default null 
    ); 

    create table status (
    id int unsigned auto_increment primary key, 
    userid int not null, 
    current_status int not null, 
    created datetime default null 
    ); 

'user.id'는 'friendship.userid'및 'status.userid'와 같습니다.

· 상황은 다음과 같습니다.

1, 사용자가 로그인하여 친구의 상태 번호를 가져옵니다.

2, PHP는 사용자의 ID를 얻었고 친구의 사용자 ID, 사용자 이름, 상태 및 생성 된 (상태)를 찾습니다.

일부 SQL 문장을 시도했지만 작동하지 않았습니다.

수퍼 SQL 작성자가 올바른 SQL을 표시 할 수 있습니까?

건배!

편집 됨 1;

나는 이와 같이 SQL을 시도했다.

select userid, username, current_status, created 
    from status 
    join users u1 
    on u1.id = status.userid 
    join friendship 
    on friendship.friend = u1.id 
    join user u2 
    on u2.id =friendship.userid 
    where u2.id = "the user's id from php"; 

그리고 mysql이 "# 1146 - Table 'Application.user'가 존재하지 않습니다."

+0

시도한 SQL 중 일부를 표시해야합니다. –

+0

또한 status.current_status는 무엇입니까? varchar (db의 트윗 부분)이되어야합니다. –

+0

이 질문은 연구가 부족합니다. 테이블을 만드는 것 이상의 아무것도 수행되지 않습니다. 젠체하는 길은 멀다. – Katti

답변

1

테이블 이름이 "사용자"인 동안 첫 번째 조인 문은 "사용자"입니다. 이것은 일반적인 초보자 오류입니다. 표준을 선택하고 따라야합니다. 내가 보는 대부분의 DB는 단수 형태를 사용하기 때문에 테이블 이름이 "친구"인지 "친구"인지에 혼란이 없습니다.

걱정하지 않으셔도됩니다. 실제로 시작하기 전에 모든 사람들이이 실수를 저지른다고 생각합니다. 다른 오류가있을 수 있지만이 오류는 즉시 나타납니다.

해결 방법을 알려주세요. ... 즉 user.userid에서 선택

+0

나는 그것을 고쳤다. 나는 나 자신에게 실망했다. .. 그러나 지금 내가 기대했던 정확하게 그 일. 고마워요! – user1258134

+0

오. 이것은 얼마 전 (1 년 이상)이었습니다. 이 문제가 해결되면 속도가 Answered와 같습니다. 감사. 나는 너무 실망하지 않을 것이다. 치명적인 오류를 발생시키는 사소한 오류를 범하고 범인을 찾기 위해 며칠 동안 찾았습니다. 이 경우 나는 신선한 눈으로 돌아와 각각의 변수 선언과 사용이 다른 것과 일치하는지 확인한다. 괜찮은 코드 편집기와 IDE는 문법 검사와 코드 반영으로 막대한 버그를 예방합니다. –

0

이런 식으로 뭔가 작동합니다 :

아, 그리고 테이블에 내가에서 선택하고있는 테이블 선언 선택

select u1.userid, username, current_status, created 
from status 
    inner join [user] u1 on u1.id = status.userid 
    inner join friendship on friendship.friend = u1.id 
    inner join [user] u2 on u2.id = friendship.userid 
    where u2.id = @User2Id 

처럼이 코멘트에 언급되었다 : 테이블 'Application.user'가 없습니다.

SQL Server 사용자는 예약어이므로 대괄호를 추가합니다. (코드 참조). 또는 테이블 이름을 다른 것으로 변경하십시오 (IE 클라이언트, TwitterUser 등)

+0

정말 고마워요. 당신처럼 내 SQL을 변경했습니다. 사실 나는 내가 SQL을 배우고 특정 시간을 보내야한다고 생각한다. (어쨌든!) – user1258134

+0

오, 그리고 "상태."를 "select createt"에 추가했다. cuz sql은 모호하다. – user1258134

관련 문제