SET 변수와 함께 Go MySQL 쿼리 사용
변수를 설정하고 이를 컴플렉스에서 사용하는 Go MySQL 쿼리를 작성하려고 합니다. ORDER BY 절. 쿼리는 콘솔에서 성공적으로 실행되지만 Go에서 구문 오류가 발생합니다.
가능한 해결 방법
안타깝게도 Go의 데이터베이스/sql 패키지는 현재 MySQL 사용자 설정을 지원하지 않습니다. 정의된 변수. 따라서 질문에 설명된 접근 방식은 현재 패키지의 제한 사항으로 인해 실현 가능하지 않습니다.
대체 접근 방식
동적 쿼리 생성:
한 가지 대안은 입력 매개변수를 기반으로 ORDER BY 절을 동적으로 생성하여 변수 대체의 필요성을 없애는 것입니다.
<code class="go">func (d *DB) SelectByUserId(uid string, srt string, pg, lim int) ([]Inventory, error) { query := ` SELECT * FROM inventory WHERE user_id = ? ORDER BY ` + generateOrderBy(srt) + ` LIMIT ?,?; ` rows, err := d.Query( query, uid, pg*lim, lim, ) // ... (rest of the code remains the same) return result, nil } func generateOrderBy(srt string) string { order := "" switch srt { case "type,asc": order = "`type` ASC" case "type,desc": order = "`type` DESC" // ... (add other cases) } return order }</code>
매개변수 확장:
또는 수동으로 ? 변수가 필요하지 않도록 쿼리 문자열에 자리 표시자를 추가합니다. 이 접근 방식에는 각 ?를 대체하는 문자열을 작성하는 작업이 포함됩니다. 해당 매개변수 값으로 변경하세요.
<code class="go">func (d *DB) SelectByUserId(uid string, srt string, pg, lim int) ([]Inventory, error) { query := fmt.Sprintf(` SELECT * FROM inventory WHERE user_id = '%s' ORDER BY CASE WHEN '%s' = 'type,asc' THEN `type` END, CASE WHEN '%s' = 'type,desc' THEN `type` END DESC, CASE WHEN '%s' = 'visible,asc' THEN visible END, CASE WHEN '%s' = 'visible,desc' THEN visible END DESC, CASE WHEN '%s' = 'create_date,asc' THEN create_date END, CASE WHEN '%s' = 'create_date,desc' THEN create_date END DESC, CASE WHEN '%s' = 'update_date,asc' THEN update_date END, CASE WHEN '%s' = 'update_date,desc' THEN update_date END DESC LIMIT %d,%d; `, uid, srt, srt, srt, srt, srt, srt, srt, srt, pg*lim, lim) rows, err := d.Query( query, ) // ... (rest of the code remains the same) return result, nil }</code>
위 내용은 Go MySQL 쿼리에서 SET 변수를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!