2013-06-05 2 views
0

10 개의 행과 열 (uid, id, registered_users, ...)이있는 테이블 "뉴스"가 있습니다. 이제 내 웹 사이트에 로그인 할 수있는 사용자가 있습니다 (등록 된 모든 사용자는 사용자 ID). 사용자는 내 웹 사이트의 뉴스를 구독 할 수 있습니다.SQL - UPDATE 문을 사용하여 값 유지

SQL에서 의미 : "news"테이블과 uid (뉴스의) 행을 선택하고 현재 사용자의 사용자 ID를 "registered_users"열에 삽입해야합니다.

INSERT INTO news (registered_users) 
VALUES (user_id) 

INSERT 문에는 WHERE 절이 없으므로 UPDATE 절이 필요합니다.

UPDATE news 
SET registered_users=user_id 
WHERE uid=post_news_uid 

하지만 더 이상의 사용자가 "registered_users"에서 같은 소식에 이전 사용자 ID를 가입 할 경우 손실됩니다 ....

는 SQL UPDATE 문 다음의 현재 값을 유지하는 방법이 있나요 ?

저는 PHP (mysql)를 사용합니다. (22,33,45)는

  • --- 3 사용자는 UID 5
  • 와 뉴스를 구독

    • 테이블 "뉴스"5 행 (UID) 열 "registered_users"목표는 이것이다
    • 테이블 "뉴스"행 7 (UID) 열 "registered_users"(21,39)
    • 은 --- 2 사용자가 당신이 삽입 할 것 소리 uid가 7
    +0

    이 감사 테이블을 작성하면 매일 idstring을 구문 분석 할 필요가 없기 때문에 뉴스의 모든 사용자를 찾는 것이 훨씬 빠르다는 것을입니다. –

    +0

    예, registered_users는 쉼표로 구분 된 텍스트 문자열입니다. – Jim

    답변

    1

    당신은 그들이 같은 에 registeres이 소식에 사용자를 매핑하는 추가 테이블을 만들어야합니다 like

    ---------------- 
    | News | Users| 
    ---------------- 
    | 5  | 22 | 
    | 5  | 33 | 
    | 5  | 45 | 
    | 7  | 21 | 
    | ... | ... | 
    ---------------- 
    

    그런 다음 여러 개의 검색어 t 먼저 news_id와 user_id를 검색하여 사용하는 언어에 따라 변수에 저장 한 다음 user_news에 삽입하십시오.

    장점은 "(22, 33, 45)"

    1

    와 뉴스를 구독 SELECT 문 - INSERT with SELECT

    예 : 당신이에서 news의 행을 변경하려면 새 사용자를 삽입 요구하고있다처럼

    INSERT INTO tbl_temp2 (fld_id) 
         SELECT tbl_temp1.fld_order_id 
         FROM tbl_temp1 
         WHERE tbl_temp1.fld_order_id > 100; 
    
    +0

    하나의 질문은 여기에 ... 어떻게 내 진술을이 가치에 삽입합니까? tbl_temp2는 테이블이고 fld_id는 열이지만 값 부분은 어디에 있습니까? – Jim

    +0

    VALUE() 섹션이 없으므로 삽입하려는 모든 값을 반환하는 쿼리를 작성하기 만하면됩니다. 표에 표시된 순서대로 필드를 선택하거나 삽입 할 필드를 지정할 수 있습니다 (위의 예에서는 필드 만 (fld_id) 필드에 삽입합니다). –

    2

    소리가 난다 :

    5  22,33 
    

    다음 사용자 45 개 가입 한, 당신은 얻을 :

    5 22,33,45 
    

    내가 이해할 수 없다면 알려주십시오. 이 솔루션의 나머지 부분은이 접근 방법을 과장하는 것입니다.

    데이터를 저장하는 것은 좋지 않은 나쁜 방법입니다. 관계형 데이터베이스는 행과 열이있는 테이블 주위에 설계되었습니다. 목록은 표의 여러 행으로 표현되어야하며 이 아니라 문자열 연결 값으로 표시되어야합니다. 이것은 정수 ID가 있고 데이터 구조가 정수를 문자열로 변환해야 할 때 더욱 악화됩니다.

    create table NewsUsers (
        NewsUserId int identity(1, 1) primary key, 
        NewsId int not null, 
        UserId int not null, 
        CreatedAt datetime default getdaete(), 
        CreatedBy varchar(255) default sysname 
    ); 
    

    내가 SQL Server를 사용하는 구문을 보여 주었다 :

    올바른 방법은 테이블을 소개하는 것입니다, 같은 NewsUsers을 말한다. NewsUserId 열은이 테이블에 대한 자동 증가 기본 키입니다. NewsId 열은 뉴스 항목입니다 (첫 번째 예에서는 5). UserId 열은 등록한 사용자 ID입니다. CreatedAtCreatedBy 열은 거의 모든 테이블에 넣을 수있는 편리한 열입니다.이 구성에

    , 당신은 수행하여 문제를 처리 할 것입니다 : 보이는

    create table user_news (user_id int, news_id int); 
    

    :

    insert into NewsUsers 
        select 5, <userid>; 
    
    +0

    당신이 그것을 이해 올바른 :) 그것은 5에서 변경할 수 있습니다 | 22,33 ~ 5 | 22,33,45 – Jim

    관련 문제