MySQL 쿼리문μ ν΅νμ¬, filter μ²λ¦¬ ( κ° νλͺ©λ³ μ€λ¦μ°¨μ,λ΄λ¦Όμ°¨μ μ 리 ) νλ €κ³ νμλ€.
μ°μ , λ΄κ° νν°λ₯Ό μ μ©μν€κΈ°μν΄ ν μκ°μ΄λ€.
κ°μ₯ 첫νμ΄μ§λ₯Ό λ‘λν λλ νμ¬λ₯λ ₯μΉ(ca) κ° λμμμΌλ‘ νμ΄μ§ λ‘λλ₯Ό νλ€.
νλͺ©μ ν΄λ¦νλ©΄, filterλ₯Ό μ μ©ν νλμ μ€νΈλ§ κ°μ 쿼리문μ ν¬ν¨νκ³ , μ€λ¦μ°¨μμΌλ‘ μ 리ν μ§ λ΄λ¦Όμ°¨μμΌλ‘ μ 리ν μ§ κ²°μ νλ€. (μ΄κΈ°λ DESC μ΄κ³ , ν΄λ¦μ νλ©΄, ASC λ‘ μ λ ¬ )
μνλ νμ΄μ§λ₯Ό λ‘λ©νλ€.
쑰건문μ νμ©νμ¬, μνλ 쿼리문μ μ μ©μν¨λ€.
λν 'Date of birth' μ 'Values_column' μ²λΌ νΉμλ¬Έμλ λμ΄μ°κΈ°λ₯Ό ν 쿼리λ λ°λ‘ μμΈμ²λ¦¬λ₯Ό ν΄μ£Όμ΄μΌνλ€.
μμλλ‘ μ²λ¦¬λ₯Ό νμ¬, λ¬Έμ λ₯Ό ν΄κ²°νμλ€.
λ¨Όμ Seach page μ μ½λμ΄λ€.
// useState λ₯Ό ν΅νμ¬, μνκ΄λ¦¬
const [verify, setVerify] = useState(initialVerify)
const [filter, setFilter] = useState(initialFilter)
//νμ¬ filterμ κ°κ³Ό, ν΄λ¦ν filterμ κ°μ΄ μΌμΉνλ©΄ verify κ°μ μ ννλ€. κ·Έν, filter κ°μ μ νν νν°κ°μΌλ‘ μ
λ°μ΄νΈνλ€.
const handleFilterChange = (newFilter) => {
if (filter === newFilter) {
setVerify(!verify)
} else {
setVerify(true)
}
setFilter(newFilter)
}
// κ° νλͺ©μ ν΄λ¦νμκ²½μ°, μμ ν¨μλ₯Ό μ€νμν¨λ€.
<th onClick={() => handleFilterChange('ca')}>νμ¬λ₯λ ₯</th>
<th onClick={() => handleFilterChange('pa_converted')}>μ΅λ μ μ¬λ₯λ ₯</th>
<th onClick={() => handleFilterChange('Date of birth')}>μμΌ</th>
<th onClick={() => handleFilterChange('Name')}>μ΄λ¦</th>
<th onClick={() => handleFilterChange('Values_column')}>κ°μΉ</th>
<th onClick={() => handleFilterChange('Salary')}>κΈμ¬</th>
μ΄μ μ΄λ κ² μνκ΄λ¦¬ν κ°μ ν΄λ¦ν λλ§λ€, useEffect λ‘ λ¦¬ν¨μΉμ νλ€.
μλλ 쿼리문μ μμ±ν μ½λμ΄λ€.(API)
// filter κ°μ΄ req λ‘ λμ΄μ¨κ²μ΄ μλ€λ©΄ κ·Έλλ‘ μ¬μ©νκ³ μλκ²½μ° μ΄κΈ°κ°μΌλ‘ νμ¬λ₯λ ₯μΉ(ca) κ°μΌλ‘ μ€μ νλ€.
let filter = req.query.filter ? req.query.filter : 'ca'
// verify κ°μ΄ true μΌ κ²½μ°μλ λ΄λ¦Όμ°¨μ, μλκ²½μ°μλ μ€λ¦μ°¨μμΌλ‘ μΈν
νλ€.
const verify = req.query.verify === 'true' ? 'DESC' : 'ASC'
// λμ΄μ°κΈ° νΉμ νΉμλ¬Έμκ° μλ filterμ κ²½μ° μμΈμ²λ¦¬λ₯Ό ν΄μ€λ€. κ·ΈλμΌ μ λλ‘ μΏΌλ¦¬κ° μλνλ€.
if (filter === 'Date of birth' || filter === 'Values_column') {
filter = `\`${filter}\``
}
const query = `SELECT *,
// μ μ¬λ₯λ ₯ κ°μκ²½μ°, λλ€ν¬ν
μ΄ μμ¬μμ΄ μλμ κ°μ΄ μμΈμ²λ¦¬λ₯Ό ν΄μ€μΌνλ€.
CASE
WHEN pa < -10 THEN pa * -2
WHEN pa < 0 THEN pa * -20
ELSE pa
END AS pa_converted ,
// Not For Sale μΈ μ μλ€μ λͺΈκ°μ΄ 347975206 λ‘ λμ΄μμ΄μ, -1 λ‘ λ§λ€μλ€.
// Search νμ΄μ§μμ κ°μΉκ° -1 μΈ κ°μ "Not For Sale" λ‘ λ λλ₯Ό νκΈ°μν΄μ -1 λ‘ μ²λ¦¬νλ€.
// ( μ€λ¦,λ΄λ¦Ό μ°¨μλ κ³ λ €ν νλ¨μ΄λ€.)
CASE
WHEN Values_column = 347975206 THEN -1
ELSE Values_column
END AS Values_column FROM fm_table ORDER BY ${filter} ${verify} LIMIT ${limit} OFFSET ${offset}`
connection.query(query, (err, result) => { ...
μμ²λΌ, μ½λλ₯Ό μμ±νλ μνλ κ°μ λμΆν μμμλ€.