반복되는 인보이스 생성과 관련된 PHP 코드 작업 중입니다. 나는 논리를 통해 생각할 도움이 필요합니다. 궁극적으로 필자는 일종의 Insert/Select 문으로 끝날 것이라고 생각합니다. 궁극적으로 여기서 생성되는 PHP 코드는 야간에 cron으로 실행됩니다.필드 및 로직을 변경하여 select 문을 삽입 하시겠습니까?
먼저, 참조 테이블에 대한 내 테이블 항목 중 일부를 보여주고 그들이하는 일에 대해 설명합니다. 이 테이블은 Invoice라고하며 다른 테이블이 연관되어 있지만이 테이블의 논리를 이제 손톱에 넣을 수 있다면 다른 테이블에 적용 할 수 있다고 생각합니다.
ID =이 항목은 자동으로 증가하는 기본 키이며 인보이스 번호가됩니다.
되풀이 = 이것은 인보이스가 한 번 또는 반복되는지 여부입니다. O = 한 번, M = 월간 등
recurred = 이것은 삽입시 N으로 설정되며 테이블에 생성 될 다음 되풀이되는 송장이이 기준에 따라야하는지 확인하기 위해 사용하는 논리입니다 송장 여부. 새로운 되풀이 송장이 테이블에 삽입되면, 이것은 Y로 변경되어 cron 작업에 의해 다시 처리되지 않습니다.
date = 청구서가 삽입/생성 된 날짜입니다. 예를 들어, 인보이스 작성일이 이번 달의 15 일인 경우 작성된 다음 인보이스는 다음 달 15 일이됩니다. 본질적으로 M은 월간을 나타냅니다. 그러나 나는 31 일의 창조 날짜에 대해 무엇을해야하는지 아직 알지 못했지만 다음 달에는 30 일 밖에 안 남았고 여기서 도움을 얻을 수있었습니다.
여기 내 논리가 있습니다. 첫째, ((mysql_error를))를 O가 아닌 모든 행을 찾기 위해 쿼리를 실행하고 재발 = N.
$result = mysql_query("SELECT * FROM invoice WHERE recurring != 'O' and recurred
= 'N'을 ") 또는 죽을;
다음, 나는 각 작업 등, 분기 별 월별, Q에 대한 M을 반복의 종류 .. 분명히 그
if recurring = M
if todays date day = 'date' day
copy line item into a new row with the following changes: new ID, todays date, and mark the recurred to N for the new insert (will mark the old one Y)
내가 대해 생각하고 그냥 뭐 실제 코드가 아닙니다.
그래서 내 질문은 어떻게 만드는 방법 1) chang을 다루는 insert select 문 ed 변수 및 2.) 인보이스가 한 달의 31 일에 생성되고 다음 달에만 30 일 (또는 28 일) 만있는 날짜 처리 방법.
SELECT *, DATEDIFF(`date`, NOW()) as diff FROM invoice WHERE recuring != 'O'
AND recured = 'N' AND diff >= 30;
으로 반복 그 목록을 통해 함께 계산하여 각 행에 대해 새로운 날짜를 사용 :
감사 월 값을 변경합니다. enum과 boolean이 무슨 뜻인지 확실치 않습니다. 당신은 정교 할 수 있습니까? – Tom
Avetis, 나는 월간 (M) 분기 별 (Q) 반기 단위 (S) 연감 (A)에 대한 계산을해야 할 것입니다. diff> = 30을 추가 한 이후로 각 유형에 대해이 쿼리를 실행하도록 권장합니까? 아니면 한 번 실행하고 모든 것을 얻고 if 문으로 정렬해야합니까? – Tom
enum과 boolean에 관해서는 O, Y, N, M이라는 글자를 "문자열"로 사용하여 데이터베이스에 문제가있는 것을 식별하고 논리에 따라 유형을 변경해야하므로 예/아니오가 필요한 경우 field of typo는 여러 가지 옵션 (예 : monthly/quarterlu/daily)이있는 경우 부울 (true/false)이어야하며 필드의 유형은 enum (일일, 월간 .eg)이라는 정확한 이름을 가질 수있는 열거 형이어야하며 모두 더 효율적으로 일합니다. –