2016-07-26 4 views
2

저는 최종 프로젝트를 위해 음식 배달 시스템을 사용하고 있습니다. 데이터베이스의 경우 레코드를 영구적으로 삭제하는 대신 더 이상 사용되지 않는 레코드를 숨겨야합니다. 예를 들어, 판매자가 특정 식사를 판매하기를 원하지 않는다면 식사를 비활성화 할 수 있지만 여전히 데이터베이스에서 사용할 수있는 식사의 기록은 유지할 수 있습니다. PHP와 SQL을 사용하여이 작업을 수행해야합니다. 누군가가 나에게 이것을 달성하는 방법에 대한 아이디어를 줄 수 있습니까? 미리 감사드립니다.PHP와 SQL을 사용하여 더 이상 사용하지 않는 레코드를 숨기려면

+2

여러 가지 방법이 있지만 가장 간단한 방법은 데이터베이스에' 값으로 '사용 가능'또는 '사용 불가'를 지정합니다. –

+0

항목이 사용 가능한지 여부를 나타내는 열을 사용하면 –

+0

은 가져온 행에 조건문을 사용합니다. 그것이 뭔가라면, 뭔가를하십시오. 이것은 간단합니다. –

답변

6

당신이 말하는 기능은 부드러운 삭제 인 입니다. 소프트 삭제에서 실제로 레코드 자체를 제거하지 않고도 레코드가 논리적으로 데이터베이스 테이블에서 제거됩니다.

소프트 삭제를 구현하는 일반적인 방법 중 하나는 열이 소프트 삭제되었는지 여부를 추적하는 열을 추가하는 것입니다. 이 목적으로 TINYINT(1) 유형을 사용할 수 있습니다.

귀하의 테이블 작성 문은 다음과 같을 것이다 :

SELECT * 
FROM yourTable 
WHERE deleted <> 1 

을 그리고 부드러운 또한 열을 삭제 갖는

CREATE TABLE yourTable (`deleted` TINYINT(1), `col1` varchar, ...) 

논리적으로 삭제되지 않은 기록을 조회하려면, 당신은 사용할 수 있습니다 낡은 레코드를 삭제하는 것이 쉬운 경우에는이를 삭제할 수 있습니다.

+0

대단히 고맙습니다! 이제 그 목표를 달성하는 아이디어가 있습니다 – znf96

+0

'deleted '나'sd'보다 더 명백한 것을 제발 부릅니다. – mcfedr

+0

@mcfedr 원래 그렇게하려고 했었지만 기술적으로 기록이 정말로 삭제되지 않았기 때문에 망설였습니다. . 그렇다면'soft_deleted '라고 생각했는데 너무 길고 clunky 한 것처럼 보였으므로'sd'를 사용하게되었습니다. –

2

엑스트라 deleted 열은 많은 경우에 훌륭한 옵션입니다. 그러나 당신은 매우 신중해야합니다. 항상을 확인하십시오. 어떤 경우에는 이것을 제어하기가 어려울 수 있습니다.

또 다른 좋은 선택은 동일한 구조의 "섀도우 테이블"이며, 삭제 프로세스를 변경하여 섀도우 테이블에 먼저 복사 한 다음 삭제하십시오. 이것은 원래 테이블을 사용하는 것이 안전하다는 것을 의미하지만, 모든 데이터에 대해 쿼리를 수행 할 수는 없습니다 (쉽게 할 수는 없지만 - UNION이 도움이 될 수 있습니다)

관련 문제