다음 MYSQL Entry를 주문에 머무르게 하다
CRM에서 고객은 데이터를 검색하여 정렬하고 ID가 12인 위치 번호9의 데이터처럼 하나의 데이터를 엽니다.고객은 다음 엔트리를 저장하고 다음 엔트리를 얻습니다.예: ID가 6인 제 엔트리의 다음 엔트리는 어떻게 얻을 수 있을까요?
과거에 저는 모든 것을 가져오고 엔트리를 검색하여 다음 엔트리를 얻기 위해 루프를 실행했지만, 더 나은 옵션이 될 것이라고 생각합니다. 제 방법은 성능이 좋지 않았습니다.
감사해요.
SELECT * FROM testdata WHERE age > 18 ORDER BY age DESC
Example of DB
|id|Name |age|
|9 |perso1 |66 |
|10|rergfdgd |55 |
|11|gthfghfh |44 |
|9 |hghghgh |33 |
|1 |kgthht |22 |
|2 |ghjgj |21 |
|3 |fhgjg |20 |
|4 |hjhjhjh |19 |
|12|ghgjgjg |18 |
|6 |tgjhgf |17 |
|7 |jhmgmhg |16 |
|8 |fghgjgjg |15 |
마지막으로 찾은 행의 위치가 9인 경우,order
그리고.limit
올바른 데이터를 가져올 수 있습니다.
SELECT *
FROM testdata
WHERE age > 18
ORDER BY age DESC
LIMIT 9,1
이는 사실상 처음 9개의 행을 무시하고 1개의 행만 가져옵니다.
상세한 것에 대하여는, https://mariadb.com/kb/en/the-mariadb-library/select/#limit 를 참조해 주세요.
쿼리를 순서대로 가져오려면 커서가 올바른 해결책입니다.https://dev.mysql.com/doc/refman/5.7/en/cursors.html
맞아요, 매번 완전한 결과 세트를 뽑아내서 반복하는 것도 괜찮겠지만, 이 문제를 해결할 수 있는 더 우아한 방법이 있어요.
여기 제가 추천하는 것이 있습니다.
옵션 1: 부울 필드를 사용하여 레코드가 이미 편집되었는지 여부를 플래그 지정합니다.이 예에서는 필드가edited
기본값은 0(false)입니다.레코드가 편집되면,edited
플래그를 1(true)로 설정합니다.
선택한 쿼리는 다음과 같습니다.
SELECT * FROM testdata WHERE age > 18 and edited = 0 ORDER BY age DESC limit 1
그러면 php 코드에서 첫 번째 레코드인 결과를 루프할 필요가 없습니다(그리고 당신이 다음을 포함하는 경우에만 해당됩니다).LIMIT 1
( )는 아직 편집되지 않은 다음 레코드가 됩니다.
옵션 2: a 추가date_modified
기본값이 NULL인 필드. 레코드를 편집할 때 저장now()
에서date_modified
필드. 그러면 다음과 같이 질문할 수 있습니다.
SELECT * FROM testdata WHERE age > 18 and date_modified IS NOT NULL ORDER BY age DESC limit 1
첫 번째 옵션과 마찬가지로 첫 번째 레코드인 결과를 루프할 필요가 없습니다(또한 첫 번째 레코드는LIMIT 1
( )는 아직 편집되지 않은 다음 레코드가 됩니다.
언급URL : https://stackoverflow.com/questions/45905067/get-next-mysql-entry-with-stay-my-ordering
'programing' 카테고리의 다른 글
MySQL에서 Google BigQuery로 데이터 복사 (0) | 2022.10.02 |
---|---|
MySQL에서 특별한 칼럼은 여러 기둥을 추가하라. (0) | 2022.10.02 |
실적 시스템을 코드화하는 최선의 방법 (0) | 2022.10.01 |
공식 MySQL 커넥터에서 원하는 출력을 가져올 수 없습니다. (0) | 2022.10.01 |
C#을 사용한 MariaDB 데이터베이스 쿼리 (0) | 2022.10.01 |