Skip to content
isdnetworks
Go back

์ƒํ•˜ ๊ด€๊ณ„์™€ ๋ฌธ์ž ๊ทœ์น™์„ ๊ฐ™์ด ์•Œ์•„์•ผ ํ–ˆ๋‹ค

๊ณผ์ • ๋ถ„๋ฅ˜๋ฅผ ์กฐํšŒํ•˜๋Š”๋ฐ ํ•˜์œ„ ํ•ญ๋ชฉ์ด ์•ˆ ๋‚˜์™”๋‹ค. ๊ตฌ์กฐ๋Š” ๋งž๊ฒŒ ์งฐ๋‹ค.

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๊ฑด์ด๋ผ ์ „๋ถ€ ๊ฐ€์ ธ์™€๋„ ๋ถ€๋‹ด์ด ์—†์—ˆ๊ณ  ๊ฑด์ˆ˜๊ฐ€ ์ ์€ ๊ณ„์ธต ์ž๋ฃŒ๋Š” ์ด์ชฝ์ด ํ›จ์”ฌ ๋นจ๋ž๋‹ค.

์ •๋ฆฌ


Share this post on:

Previous Post
๋‘ ๋ฒŒ ์ค‘ ํ•˜๋‚˜ ๊ณ ๋ฅด๊ธฐ
Next Post
์žฌ์‹œ์ž‘ํ•ด๋„ ์•ˆ ๋„๋Š” ์ €์ชฝ ์นด์šดํ„ฐ