๊ณผ์ ๋ถ๋ฅ๋ฅผ ์กฐํํ๋๋ฐ ํ์ ํญ๋ชฉ์ด ์ ๋์๋ค. ๊ตฌ์กฐ๋ ๋ง๊ฒ ์งฐ๋ค.
Table of contents
Open Table of contents
์ฆ์ โ ๊ตฌ์กฐ๋ ๋ง๋๋ฐ 0๊ฑด์ด์๋ค
ํ ๊ตฌ์กฐ๋ ์๊ณ ์์๋ค.
CREATE TABLE category (
code varchar(20) NOT NULL,
parent_code varchar(20),
name nvarchar(100),
PRIMARY KEY (code)
);
parent_code ๋ก ์ด์ด์ง๋ ๊ตฌ์กฐ๋ผ ๊ทธ๋๋ก ์กฐํํ๋ค.
SELECT * FROM category WHERE parent_code = 'IT';
๋ฐ์ดํฐ๋ ์๋๋ฐ ๊ฒฐ๊ณผ๊ฐ 0๊ฑด์ด์๋ค.
๊ตฌ์กฐ๊ฐ ๋ง๋๋ฐ ์ ๋์จ๋ค๋ฉด ์กฐ๊ฑด์ ๋ฃ์ ๊ฐ์ด ์ ์ฅ๋ ๊ฐ๊ณผ ๋ค๋ฅด๋ค๋ ๋ป์ด๋ค. ๋์ผ๋ก๋ ๊ฐ์ ๋ณด์ด๋ฏ๋ก ๋์ด ์๋๋ผ ๋ฐ์ดํธ๋ก ๋ด์ผ ํ๋ ์ํฉ์ด์๋ค.
์์ธ โ ๊ฐ์ ์ค์ ๋ฐ์ดํธ
๊ฐ์ ๋ฐ์ดํธ๋ก ๋ดค๋ค.
SELECT code, LEN(code), DATALENGTH(code) FROM category WHERE code LIKE 'IT%';
code LEN DATALENGTH
IT 2 20
LEN ์ด 2์ธ๋ฐ DATALENGTH ๊ฐ 20์ด๋ผ ๋ค๊ฐ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์์ ธ ์์๋ค.
SELECT * FROM category WHERE parent_code = 'IT ';
๊ณต๋ฐฑ๊น์ง ๋ง์ถ๋ ๋์๋ค.
๊ณ ์ ๊ธธ์ด ์ปฌ๋ผ์ด๋ผ ๋จ๋ ์๋ฆฌ๊ฐ ์๋์ผ๋ก ์ฑ์์ง ๊ฒ์ธ๋ฐ ์ ์ฅํ ๋ ์ผ์ด๋๋ ์ผ์ด๋ผ ๋ฃ๋ ์ชฝ์์๋ ๋ณด์ด์ง ์๋๋ค.
์ ์ฝ โ DB๋ง๋ค ๋น๊ต๊ฐ ๋ค๋ฅด๋ค
์ด ์์คํ
์ ๋ ์ข
๋ฅ์ DB ๋ฅผ ์ฐ๊ณ ์์๋ค.
ํ์ชฝ ๊ณ ์ ๊ธธ์ด ๋น๊ต์์ ๋ค ๊ณต๋ฐฑ์ ๋ฌด์ํ๋ค
๋ค๋ฅธ์ชฝ ๋ฌด์ํ์ง ์๋๋ค
๊ฐ์ ์ฟผ๋ฆฌ๊ฐ DB ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
WHERE RTRIM(parent_code) = 'IT'
RTRIM ์ผ๋ก ๋ผ๊ณ ๋น๊ตํ๋ฉด ๋์ง๋ง ๊ทธ๋ฌ๋ฉด ์ธ๋ฑ์ค๋ฅผ ๋ชป ์ด๋ค.
์ปฌ๋ผ์ ๊ฐ๋ณ ๊ธธ์ด๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ๊ทผ๋ณธ์ด๋ผ ์ฎ๊ธฐ๋ ๊น์ ๊ฐ์ด ํ๋๋ฐ ๋ฌธ๋ฒ๋ง ๋ง์ถ๊ณ ์ด๋ฐ ๊ท์น ์ฐจ์ด๋ฅผ ์ ๋ณด๋ฉด ์กฐ์ฉํ ์ด๊ธ๋๋ค.
์ฃผ์ โ ๋ฌธ์ ์ข ๋ฅ์ ๋ฐ์ธ๋ฉ
์ด๋ฆ ์ปฌ๋ผ์ ์ ๋์ฝ๋์๋ค.
SELECT * FROM category WHERE name = '์ ๋ณด๊ธฐ์ ';
์ด๋ ๊ฒ ํ๋ฉด ์ ๋์จ๋ค.
SELECT * FROM category WHERE name = N'์ ๋ณด๊ธฐ์ ';
N ์ ๋ถ์ฌ์ผ ์ ๋์ฝ๋ ๋ฌธ์์ด๋ก ๋ณด๊ณ ์ ๋ถ์ด๋ฉด ๋ค๋ฅธ ๋ฌธ์ ์งํฉ์ผ๋ก ๋ณํ๋ผ ๋น๊ต๊ฐ ์คํจํ๋ค.
์ฝ๋์์ ์ด๋ค ํ์ผ๋ก ๋๊ฐ๋์ง๋ ๋ด์ผ ํ๋ค.
$stmt = $pdo->prepare("SELECT * FROM category WHERE name = ?");
$stmt->execute([$name]);
PARAM_STR ๋ก ๋๊ฐ๋ฉด ๊ธฐ๋ณธ์ด ์ ๋์ฝ๋๊ฐ ์๋์๋ค.
$pdo = new PDO($dsn, $user, $pass, [
PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8,
]);
SQLSRV_ATTR_ENCODING ์ ์ง์ ํด ๋๊ฐ๋ ํ์ ๋ง์ท๋ค.
์ฟผ๋ฆฌ๋ง ๋ณด๊ณ ์์ผ๋ฉด ์ด ์๋ฆฌ๊ฐ ์ ๋ณด์ธ๋ค. ๋ชจ๋ฅด๋ฉด ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ ์ ๋์จ๋ค๋ก ๋๋๋ค.
๊ฒ์ฆ โ ์ ๋์ฌ ๋ ๋ณผ ์์
๊ฐ์ด ์ ๋์ฌ ๋ ๋ณผ ์์๋ฅผ ์ ์๋ค.
1. ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก ์๋๊ฐ SELECT COUNT(*) ์กฐ๊ฑด ์์ด
2. ์กฐ๊ฑด ์์ด ๋ช ๊ฑด์ธ๊ฐ LIKE '%๊ฐ%' ๋ก ๋๊ฒ
3. ๊ฐ์ ์ค์ ๋ฐ์ดํธ๋ DATALENGTH, HEX
4. ์๋ค ๊ณต๋ฐฑ์ด ์๋๊ฐ LEN vs DATALENGTH
5. ๋ฌธ์ ์ข
๋ฅ๊ฐ ๋ง๋๊ฐ N ์ ๋ ์ ๋ฌด๋ก ๋น๊ต
6. ์ฝ๋์์ ์ด๋ป๊ฒ ๋๊ฐ๋๊ฐ ์ฟผ๋ฆฌ ๋ก๊ทธ๋ก ํ์ธ
LEN ๊ณผ DATALENGTH ๋ฅผ ๋๋ํ ๋ณด๋ ๋ท์งธ๊ฐ ์ด๋ฒ ์์ธ์ ์ก์๋ค.
์์๊ฐ ์์ผ๋ฉด ๋งค๋ฒ ์ฒ์๋ถํฐ ํค๋งค์ง ์๊ณ ์ด๋๋ก ๋ณด๋ ๊ทธ๋ค์๋ถํฐ๋ ๊ฐ์ ์ ํ์ ๋นจ๋ฆฌ ์ฐพ์๋ค.
์กฐ์น โ ๊ท์น ์ ๋ฆฌ์ ๊ณ์ธต ์กฐํ
์ฎ๊ธฐ๋ ๊น์ ๊ท์น๋ ์ ํ๋ค.
๋ฌธ์ ์ปฌ๋ผ์ ๊ฐ๋ณ ๊ธธ์ด๋ฅผ ์ด๋ค
์ฝ๋์ฑ ๊ฐ์ ์๋ฌธ ๋๋ฌธ์์ ์ซ์๋ง (๊ณต๋ฐฑยทํน์๋ฌธ์ ๊ธ์ง)
์ด๋ฆ์ ์ ๋์ฝ๋
๋น๊ต๋ ํญ์ ๊ฐ์ ๋ฌธ์ ์ข
๋ฅ๋ก
์ ๋ฐ์ดํฐ๋ ํจ๊ป ์ ๋ฆฌํ๋๋ฐ ์ฝ๋ ๊ฐ์ ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ ๊ฒ์ด ์ด๋ ๊ฑด์ด๋ ์์๋ค.
๊ฐ์ ์ ๋๋ก ์ฐพ๊ฒ ๋ ๋ค์๋ ์กฐํ ์์ฒด๊ฐ ๋๋ ธ๋ค.
function children($code) {
$rows = $db->query("SELECT * FROM category WHERE parent_code = ?", [$code]);
foreach ($rows as &$r) { $r['children'] = children($r['code']); }
return $rows;
}
children ์ด ํ ๋จ๊ณ์ฉ ๋ด๋ ค๊ฐ์ ๊น์ด๊ฐ 4๋จ๊ณ๋ฉด ์กฐํ๊ฐ ์์ญ ๋ฒ ๋๊ฐ๋ค.
$all = $db->query("SELECT * FROM category");
$byParent = [];
foreach ($all as $r) { $byParent[$r['parent_code']][] = $r; }
์ ์ฒด๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ byParent ๋ก ๋ฌถ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ด์๋ค.
๋ถ๋ฅ๊ฐ 300๊ฑด์ด๋ผ ์ ๋ถ ๊ฐ์ ธ์๋ ๋ถ๋ด์ด ์์๊ณ ๊ฑด์๊ฐ ์ ์ ๊ณ์ธต ์๋ฃ๋ ์ด์ชฝ์ด ํจ์ฌ ๋นจ๋๋ค.
์ ๋ฆฌ
- ๊ตฌ์กฐ๋ฅผ ์์๋ ๋ฌธ์ ๊ท์น์ ๋ชจ๋ฅด๋ฉด ์กฐํ๊ฐ ์ ๋๋ค
- ๋์ผ๋ก ๊ฐ์ ๋ณด์ด๋ฉด ๊ฐ์ ์ค์ ๋ฐ์ดํธ๋ฅผ ๋ณธ๋ค
- ๊ธธ์ด์ ๋ฐ์ดํธ๊ฐ ๋ค๋ฅด๋ฉด ์ฑ์์ง ๊ฒ์ด ์๋ค
- ๊ณ ์ ๊ธธ์ด ์ปฌ๋ผ์ ๋ค๊ฐ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์์ง๋ค
- ์ฑ์์ ์ ์ฅํ ๋ ์ผ์ด๋ ๋ฃ๋ ์ชฝ์์๋ ์ ๋ณด์ธ๋ค
DB๋ง๋ค ๋ค ๊ณต๋ฐฑ ๋น๊ต ๋ฐฉ์์ด ๋ค๋ฅด๋ค- ํ์ชฝ์์ ๋๋ ์ฟผ๋ฆฌ๊ฐ ์ฎ๊ธฐ๋ฉด ์ ๋ ์ ์๋ค
- ์ ๋์ฝ๋๋ ๋น๊ตํ ๋ ํ์๊ฐ ํ์ํ ์ ์๋ค
- ์ฝ๋์์ ์ด๋ค ํ์ผ๋ก ๋๊ฐ๋์ง ๋ณด๊ณ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์ ํ๋ค
- ์ ๋์ฌ ๋ ๋ณผ ์์๋ฅผ ์ ํด ๋๋ค
- ์ฎ๊ธฐ๋ ๊น์ ์ปฌ๋ผ ์ข ๋ฅ์ ๊ฐ ๊ท์น์ ์ ๋ฆฌํ๋ค