2012-06-10 4 views
0

내 프로젝트에 기능이 필요합니다. 3 개의 mysql 테이블이 있습니다.mysql에서 필드를 설정하는 쿼리는 무엇입니까

Requests - request_id, request_msg, user_id, request_datetime 
Responses - response_id, request_id, response_msg, user_id, response_datetime, readflag 
Users-  user_id, user_email, user_name 

사용자가 요청을 게시하고 다른 사용자로부터 응답을받습니다. [매우 stackoverflow 사이트와 유사]

응답 표의 readflag는이 응답을 관련 요청을 게시 한 사용자가 읽었는지 여부를 나타냅니다.

0- NOT READ, 1-READ 

처음이 필드는 내가 그것을 같은 페이지에있는 1

모든 요청을 표시 할 0입니다. 사용자가 요청을 클릭하는 동안이 요청과 관련된 모든 응답이 다른 페이지에 나열됩니다.

모든 사용자는 모든 사용자의 요청 및 응답을 읽을 수 있습니다. 요청을 게시 한 사용자가 응답을 읽는 동안 readflag = 1로만 응답을 표시하려고합니다.

"UPDATE 응답 SET readflag = 1 WHERE request_id = '$ request_id'"및 .....;

나를 도와주세요.

+1

음, 어떤 특정 레코드를 업데이트하려고합니까? – saluce

+0

@saluce - 모든 응답을 업데이트하려고합니다. 응답 테이블의 readflag 필드를 '1'로 설정하고 싶습니다. –

+0

그래서 위에 게시 한 쿼리는 그렇게 할 것입니까? – Ben

답변

0

요청과 응답을 이미 표시 한 경우 이미 request_id와 user_id를 알고있는 것이 좋습니다. user_id가 request_id에 속하면 user_id는 요청을 작성한 사용자에게 속합니다. 그러므로 당신이 쓰는다면

UPDATE Responses AS Res JOIN Requests as Req USING (request_id) 
SET Req.readflag = 1 
WHERE Res.request_id = '$request_id' 
AND Res.user_id = '$user_id' 

나는이 테이블의 별칭을 사용하여 Req.user_id와 Res.user_id를 구별합니다. 요청 테이블에 request_id = '$ request_id'및 user_id = '$ user_id'가있는 레코드가 없으면 응답이 업데이트되지 않습니다.

saluce의 응답은 JOIN 없이도 작동하고 일부 경우에만 실행되어야하기 때문에 더 빠를 것이라고 생각합니다. 어쩌면 당신은 당신이 가진 것과 함께 있기를 원할 것입니다.

+0

모든 행을 업데이트하려면 조건이 필요 없습니다.그냥 WHERE 조건을 제거하십시오 –

1

이러한 레코드를 업데이트하려면 먼저 사용자 ID를 저장하는 변수를 갖고 그 요청이 해당 사용자에게 속하는지 확인해야합니다. 그렇다면 해당 요청에 대한 모든 응답을 업데이트하십시오.

$userID = "devesh"; 
$requestOwner = "devesh"; 

if ($userID == $requestOwner) { 
    $qry = "UPDATE responses SET readflag = 1 WHERE request_id = '$request_id'; 
    // Execute query here 
} 
+0

안녕 saluce .. 나는 정확히 동일하게하고 있습니다. 먼저 쿼리를 실행하여 해당 요청에 대한 user_id를 가져옵니다. $ sql_query = "SELECT user_id FROM 요청 where request_id = '$ request_id'"; 그런 다음이 user_id를 로그인 한 user_id와 비교하여 일치하는 경우 사용자가 지정한 동일한 쿼리를 실행합니다. 하지만 문제는이 경우 두 개의 쿼리를 실행해야한다는 것입니다. 하나의 쿼리가 작업을 수행 할 수있는 몇 가지 솔루션을 찾고 있습니다. –

관련 문제