Skip to content

Instantly share code, notes, and snippets.

@kandalf
Last active October 22, 2018 17:25
Show Gist options
  • Save kandalf/6168a282a26758189773f173d3a1850a to your computer and use it in GitHub Desktop.
Save kandalf/6168a282a26758189773f173d3a1850a to your computer and use it in GitHub Desktop.
func SearchUsersLike(terms []string) ([]*UsernameData, error) {
var args = make([]interface{}, len(terms))
var query = `
SELECT DISTINCT username, slug
FROM users u
INNER JOIN submissions s ON s.user_id = u.id
INNER JOIN works w ON w.submission_id = s.id
WHERE u.confirmed_at IS NOT NULL AND
w.discontinued_at IS NULL AND (`
for idx, term := range terms {
terms[idx] = fmt.Sprintf("u.username ILIKE '%%$%d%%'", idx+1)
args[idx] = term
}
query += strings.Join(terms, " OR ")
query += ")"
fmt.Printf("QUERY: %s\n", query)
rows, err := db.Instance.Query(query, args...)
if err != nil {
return nil, err
}
results := make([]*UsernameData, 0)
for rows.Next() {
user := new(UsernameData)
if err := rows.Scan(&user.Username, &user.Slug); err != nil {
return nil, err
}
results = append(results, user)
}
return results, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment