Postgres 및 Mysql 용 데이터베이스/sql 패키지 및 드라이버를 사용하여 다음을 수행하고 싶습니다. 한 행을 선택하고 0 행, 하나의 행 또는 둘 이상의 행이 있음을 알고 싶습니다. QueryRow 함수는이를 확인하지 못합니다. 한 가지 이상의 행이 있는지에 관계없이 오류없이 한 행을 반환 할 것이기 때문입니다. 내 상황에서는 둘 이상의 행에 오류가있을 수 있으며이를 알고 싶습니다. 나는 이것을하기위한 일반적인 함수를 만들고 싶다.
쿼리 함수를 사용하는 함수를 만드는 방법을 살펴 봤지만 두 개 이상의 행이있는 경우 첫 번째 행을 반환하는 방법을 알지 못합니다. 두 개 이상의 행이 있다는 사실을 반환하고 싶지만 첫 번째 행을 반환하고 싶습니다. 두 개 이상의 행이 있는지 확인하려면 다음을 수행해야하며 첫 번째 행을 덮어 씁니다. 분명히 일반적인 기능을 만들지 않고이 작업을 수행 할 수 있지만 많은 작업을 수행해야하기 때문에 기능을 원합니다.
누군가이 작업을 수행하는 방법을 설명해 주시겠습니까? IE. 성공한 다음 작업이 완료되거나 다음 작업이 아무 것도 반환하지 않을 때 함수에서 첫 번째 행을 반환합니다.Sql Select - 반환 된 총 행
2
A
답변
1
저는이를 달성하기 위해 database/sql
& MySQLDriver
두 가지 모두를 사용하고 있습니다. 을 https://github.com/go-sql-driver/에 다운로드 할 수 있습니다.
나는 데이터베이스에서 하나 이상의 행을 가져 오기 위해 execQuery
함수를 직접 작성했습니다. 그것은 MySQL을 기반으로하지만 비슷한 구현으로 Postgres에도 사용할 수 있다고 생각합니다.
test
이라는 DB 테이블이 있고 id
, name
, age
이라는 행이 있다고 가정합니다.
코드 :
var db *sql.DB // it should be initialized by "sql.Open()"
func execQuery(SQL string, args ...interface{}) (rows *sql.Rows, is_succeed bool) {
rows, err := db.Query(SQL, args...)
var ret bool
if err == nil && rows != nil { // if DB query error rows will be nil, it will return false
ret = true
} else {
ret = false
}
return rows, ret
}
사용법 :
var name, age string
rows, is_succeed = execQuery("SELECT `name`, `age` FROM `test` WHERE `id` = ?", "123")
if !is_succeed {
// error
return
}
for rows.Next() { // if have zero result rows, this for route won't execute
err := rows.Scan(&name, &age)
// check if has error & do something
}
하기이를 달성 할 수있는 SQL을 사용하여, 단지 for
경로에 카운터를 추가, 많은 행이 반환 방법을 알고 싶다면
sql.Rows
은 목록 구조가 좋기 때문에 반환 된 행의 첫 번째 행에 rows *sql.Rows
점이 있습니다. rows.Next()
을 사용하여 모든 행을 탐색하십시오. 그게 네가 물어 본 것 같아.
당신이 정말로 행을 알고 싶다면
는memcacheDB
또는
Redis
가 아니면 그냥 자신이 문제를 해결하는 데 도움이 할 수있는 간단한 카운터를 구현 같은 캐시 정비사를 사용하여 매우 자주
을 계산합니다.
관련 문제
- 1. select 문에서 반환 된 행 수를 반복하십시오.
- 2. SQL 총 행 수 (DENSE_RANK/DISTINCT)
- 3. SELECT T-SQL 명령에서 결과 집합에 반환 된 행의 총 수를 포함하는 방법은 무엇입니까?
- 4. SQL의 SELECT 문에서 반환 된 행 목록을 반복하는 방법은 무엇입니까?
- 5. SQL 쿼리에서 반환 된 행 수에 따라 값 반환
- 6. 다른 쿼리에서 반환 된 행 수를 ORDER BY로 쿼리 SELECT
- 7. 총 행 수 + 제한으로
- 8. T-SQL 중복 행 반환
- 9. SQL CASE SELECT 반환 문자
- 10. SQL : 삽입시 Select 문에서 행 제거
- 11. SQL 쿼리에서 DISTINCT 행 반환
- 12. 쿼리에서 반환 된 총 금액의 합계
- 13. 저장 프로 시저 내의 select 문에 의해 반환 된 행
- 14. SELECT 문에 의해 반환 된 데이터를 사용하여 새 행 삽입
- 15. SQL select 쿼리는 대문자로 된
- 16. SQL Count LIMIT을 사용하는 총 행 수
- 17. 테이블의 총 행 수를 반환하십시오.
- 18. SELECT 문에서 일치 또는 최상위 행 반환
- 19. SQL SELECT 자식 테이블 제로 행
- 20. 총 행 수
- 21. 쿼리에서 반환 된 행 개수 계산
- 22. 오라클 총 행
- 23. 테이블 총 행 찾기
- 24. PostgreSQL에서 하위 쿼리에서 반환 된 총 결과 수는 어떻게 얻습니까?
- 25. 여러 값을 공통으로 갖는 SQL select 행
- 26. SQL SELECT 쿼리에서 반환 된 열 값을 바꾸는 방법은 무엇입니까?
- 27. Sql 서버 : select 문에 의해 반환 된 모든 레코드 잠금
- 28. SQL select 문에서 반환 된 문자열은 어떻게 인코딩됩니까?
- 29. SQL : 총 테이블 행 수의 백분율로 백분율 (*)을 기준으로 그룹화
- 30. SQL SELECT DISTINCT 그룹의 최신 행
답변 해 주셔서 감사합니다. 달성하고자하는 것은 본질적으로 얼마나 많은 행이 반환되는지를 아는 것입니다. MySQL은 그것을 달성하는 방법을 가지고 있지만 Postgres는 그렇지 않습니다. 두 번째 선택은 둘 이상의 행이 있는지를 확인하는 것입니다. 두 번째 행이있는 경우 첫 번째 행은 추측 된 두 번째 행에 대해 "덮어 쓰기"됩니다. 요약하면, 내가 알고 싶은 것은 다음과 같은 것이다. 하나의 행이 있습니까?, b. 행이 두 개 이상 있습니까? 기음. 나는 상관없이 첫 번째 행 싶어요. 디. 이상적으로, 나는 행의 수를 알고 싶습니다만, Nexts를 비효율적으로 반복한다고 생각합니다. –
메모리에서 목록 구조를 탐색하는 것이 SQL 쿼리보다 훨씬 효율적입니다. 또한 복잡한 솔루션보다 훨씬 쉬운 몇 줄의 코드로 모든 질문에 대한 답을 찾을 수 있습니다. 그러나'rows.Next()'를 사용하면 데이터베이스/sql이 제공하는 유일한 솔루션 인 것처럼 보이거나 캐시 메카닉을 사용합니다. –