10.4. Zend_Db_Select

10.4.1. Select ¿ÀºêÁ§Æ®ÀÇ °³¿ä

Zend_Db_Select ¿ÀºêÁ§Æ®´Â,SQL ÀÇ SELECT ¹®ÀåÀ» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù. ÀÌ Å¬·¡½º¿¡´Â, Äõ¸®ÀÇ °¢ ºÎºÐÀ» Ãß°¡Çϱâ À§ÇÑ ¸Þ¼Òµå°¡ ÁغñµÇ¾î ÀÖ½À´Ï´Ù. PHP ÀÇ ¸Þ¼Òµå³ª µ¥ÀÌÅ͸¦ ±âÃÊ·Î Äõ¸®ÀÇ °¢ ºÎºÐÀ» ÁöÁ¤Çϸé, ÀÌ Å¬·¡½º°¡ Á¤È®ÇÑ SQL ¹®ÀåÀ» ÀÛ¼ºÇØ ÁÝ´Ï´Ù.Äõ¸®¸¦ ÀÛ¼ºÇϸé, ±×¸®°í´Â Åë»óÀÇ ¹®ÀÚ¿­°ú °°ÀÌ ±×°ÍÀ» ÀÌ¿ëÇØ Äõ¸®¸¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

Zend_Db_Select (Àº)´Â ´ÙÀ½°ú °°Àº ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.

  • SQL Äõ¸®¸¦ Á¶±Ý¾¿ Á¶¸³ÇØ °¡±â À§ÇØÀÇ °´Ã¼ ÁöÇâÀÇ ¸Þ¼Òµå

  • SQL Äõ¸®ÀÇ ÀϺο¡ µµÂøÇϰí, µ¥ÀÌŸº£À̽º¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â Ãß»óÈ­

  • ´ëºÎºÐÀÇ ¸ÞŸµ¥ÀÌŸ ½Äº°ÀÚÀÇ ÀÚµ¿ ÄíÆ® 󸮿¡ ÀÇÇÑ, ¿¹¾à¾î(reserved word)³ª Ư¼ö ¹®ÀÚ¸¦ Æ÷ÇÔÇÑ´Ù SQL ÀÇ ¼­Æ÷Æ®

  • ½Äº°ÀÚ³ª °ªÀÇ ÄíÆ®¿¡ ÀÇÇÑ, SQL ÀÎÁ§¼Ç °ø°Ý ´ëÃ¥

¹Ýµå½Ã Zend_Db_Select (À»)¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é ¾È µÈ´Ù°í ÇÏ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ´Ü¼øÇÑ SELECT Äõ¸®¸¦ ½ÇÇàÇÑ´Ù¸é,SQL Äõ¸® Àüü¸¦ ¹®ÀÚ¿­·Î ÁöÁ¤ÇØ, ¾î´ðÅÍÀÇ query() ¸Þ¼Òµå³ª fetchAll() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â ÆíÀÌ ÈξÀ ½ÉÇÃÇÏ°Ô µÇ°ÚÁö¿ä. Zend_Db_Select (À»)¸¦ »ç¿ëÇÏ¸é Æí¸®ÇÑ °ÍÀº, ¾î¶°ÇÑ Á¶°Ç¿¡ ÀǰÅÇϰí, ¾îÇø®ÄÉÀ̼dz»¿¡¼­ SELECT Äõ¸®¸¦ µ¿ÀûÀ¸·Î Á¶¸³ÇØ °¥ Çʿ䰡 ÀÖ´Â °æ¿ìÀÔ´Ï´Ù.

10.4.2. Select ¿ÀºêÁ§Æ®ÀÇ ÀÛ¼º

Zend_Db_Select ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÏ·Á¸é , Zend_Db_Adapter_Abstract ¿ÀºêÁ§Æ®ÀÇ select() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.41. µ¥ÀÌŸº£À̽º ¾î´ðÅÍÀÇ select() ¸Þ¼ÒµåÀÇ ¿¹


<?php

$db 
Zend_Db::factory( ...options... );
$select $db->select();

Zend_Db_Select ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇÏ´Â ¶Ç ÇϳªÀÇ ¹æ¹ýÀº, constructor¡¡ ¡¡ ÀÇ Àμö·Î µ¥ÀÌŸº£À̽º ¾î´ðÅ͸¦ ÁöÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù.

·Ê 10.42. »õ·Ó´Ù Select ¿ÀºêÁ§Æ®ÀÇ ÀÛ¼ºÀÇ ¿¹


<?php

$db 
Zend_Db::factory( ...options... );
$select = new Zend_Db_Select($db);

10.4.3. Select Äõ¸®ÀÇ ÀÛ¼º

Äõ¸®¸¦ ÀÛ¼ºÇÒ ¶§¿¡, Äõ¸®ÀÇ ±¸¸¦ °³º°ÀûÀ¸·Î Ãß°¡ÇØ ³ª°¥ ¼ö ÀÖ½À´Ï´Ù. Zend_Db_Select ¿ÀºêÁ§Æ®¿¡´Â, °³°³ÀÇ ±¸¸¦ Ãß°¡ÇØ ³ª°¡´Â ¸Þ¼Òµå°¡ ÁغñµÇ¾î ÀÖ½À´Ï´Ù.

·Ê 10.43. ¸Þ¼Òµå¸¦ »ç¿ëÇØ ±¸¸¦ Ãß°¡ÇÏ´Â ¿¹


<?php

// Zend_Db_Select ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇÕ´Ï´Ù
$select $db->select();

// FROM ±¸¸¦ Ãß°¡ÇÕ´Ï´Ù
$select->from( ...Å×À̺í°ú Ä÷³À» ÁöÁ¤ÇÕ´Ï´Ù... )

// WHERE ±¸¸¦ Ãß°¡ÇÕ´Ï´Ù
$select->where( ...°Ë»ö Á¶°ÇÀ» ÁöÁ¤ÇÕ´Ï´Ù... )

// ORDER BY ±¸¸¦ Ãß°¡ÇÕ´Ï´Ù
$select->order( ...¼ÒÆ® Á¶°ÇÀ» ÁöÁ¤ÇÕ´Ï´Ù... );

Zend_Db_Select ¿ÀºêÁ§Æ®ÀÇ ´ëºÎºÐÀÇ ¸Þ¼Òµå·Î, Æí¸®ÇÑ ¡¸È帣´Â ÀÎÅÍÆäÀ̽º¡¹Çü½ÄÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.À̰ÍÀº, °¢ ¸Þ¼Òµå°¡, ÀÚ±â Àڽſ¡°ÔÀÇ ÂüÁ¶¸¦ °á°úÀûÀ¸·Î µ¹·ÁÁÖ´Â °ÍÀÔ´Ï´Ù. Áï, ±× °á°ú¸¦ »ç¿ëÇÏÀÚ¸¶ÀÚ ´Ù¸¥ ¸Þ¼Òµå¸¦ ÄÝ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

·Ê 10.44. È帣´Â ÀÎÅÍÆäÀ̽ºÀÇ »ç¿ë¿¹


<?php

$select 
$db->select()
    ->
from( ...Å×À̺í°ú Ä÷³À» ÁöÁ¤ÇÕ´Ï´Ù... )
    ->
where( ...°Ë»ö Á¶°ÇÀ» ÁöÁ¤ÇÕ´Ï´Ù... )
    ->
order( ...¼ÒÆ® Á¶°ÇÀ» ÁöÁ¤ÇÕ´Ï´Ù... );

ÀÌ ¸¶µðÀÇ ¿¹¿¡¼­´Â È帣´Â ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÕ´Ï´Ù¸¸, ÀÌ ¹æ½ÄÀ» »ç¿ëÇÏÁö ¾Ê°í »ç¿ëÇÏ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù. ±×·¸°Ô ÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â °Íµµ ÀÚÁÖ ÀÖ°ÚÁö¿ä.¿¹¸¦ µé¾î, Äõ¸®¿¡ ±¸¸¦ Ãß°¡Çϱâ Àü¿¡ ¾îÇø®ÄÉÀ̼ÇÀ¸·Î ¾î¶°ÇÑ Ã³¸®°¡ ÇÊ¿äÇÑ °æ¿ì µîÀÔ´Ï´Ù.

10.4.3.1. FROM ±¸ÀÇ Ãß°¡

ÀÌ Äõ¸®ÀÇ Å×À̺íÀ» ÁöÁ¤Çϱâ À§Çؼ­ from() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.Å×À̺í¸íÀº, ´Ü¼øÇÏ°Ô ¹®ÀÚ¿­·Î ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Zend_Db_Select (Àº)´Â Å×À̺í¸íÀ» ½Äº°Àڷμ­ ÄíÆ® ÇϹǷÎ, Ư¼ö ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

·Ê 10.45. from() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT *
//   FROM "products"

$select $db->select()
    ->
from'products' );

Å×À̺íÀÇ »ó°ü¸í (ȤÀº "¾Ù¸®¾î½º(alias)" (ÀÌ)¶ó°íµµ ¸»ÇÕ´Ï´Ù) (À»)¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.±× °æ¿ì´Â, ´Ü¼øÇÑ ¹®ÀÚ¿­Àº ¾Æ´Ï°í ¿¬»ó ¹è¿­À» »ç¿ëÇØ, »ó°ü¸í°ú Å×À̺í¸íÀÇ ´ëÀÀÀ» ÁöÁ¤ÇÕ´Ï´Ù. SQL ÀÇ ±× ¿ÜÀÇ ±¸·Î, ÀÌ »ó°ü¸íÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. º¹¼öÀÇ Å×À̺íÀ» °áÇÕÇÑ Äõ¸®¸¦ ÀÛ¼ºÇÏ´Â °æ¿ì´Â, Zend_Db_Select (Àº)´Â ±× Å×À̺í¸í¿¡ ±Ù°ÅÇÑ ÀÏÀÇÀÎ »ó°ü¸íÀ» ÀÛ¼ºÇÕ´Ï´Ù.

·Ê 10.46. Å×À̺íÀÇ »ó°ü¸íÀ» ÁöÁ¤ÇÏ´Â ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p.*
//   FROM "products" AS p

$select $db->select()
    ->
from( array('p' => 'products') );

RDBMS ¿¡ µû¶ó¼­´Â, Å×À̺í¸íÀÇ Àü¿¡ schema¸íÀ» ¿¬°áÇÏ´Â ¹æ½ÄÀ» ¼­Æ÷Æ®Çϰí ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù. Å×À̺í¸íÀ¸·Î¼­"schemaName.tableName" (¿Í)°ú °°ÀÌ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.ÀÌ °æ¿ì, Zend_Db_Select (Àº)´Â °¢ ºÎºÐÀ» °³º°ÀûÀ¸·Î ÄíÆ® ÇÕ´Ï´Ù. ȤÀº schema¸í°ú Å×À̺í¸íÀ» µû·Î µû·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¸¸¾à ¾çÂÊ ¸ðµÎ·Î schema¸íÀ» ÁöÁ¤ÇßÀ» °æ¿ì´Â, Å×À̺í¸í°ú µ¿½Ã¿¡ ÁöÁ¤ÇßÁö¸¸ ÆíÀÌ ¿ì¼±µË´Ï´Ù.

·Ê 10.47. schema¸íÀÇ ÁöÁ¤ÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT *
//   FROM "myschema"."products"

$select $db->select()
    ->
from'myschema.products' );

// È¤Àº

$select $db->select()
    ->
from('products''*''myschema');

10.4.3.2. Ä÷³ÀÇ Ãß°¡

from() ¸Þ¼ÒµåÀÇ µÎ¹øÂ°ÀÇ Àμö·Î, ´ëÀÀÇÏ´Â Å×ÀÌºí¿¡¼­ ÃëµæÇÏ´Â Ä÷³À» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Ä÷³À» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ìÀÇ µðÆúÆ®´Â "*" ±×¸®°í, À̰ÍÀº "¸ðµç Ä÷³" (À»)¸¦ ³ªÅ¸³½´Ù SQL ÀÇ ¿ÍÀϵå Ä«µåÀÔ´Ï´Ù.

Ä÷³¸íÀ» ÁöÁ¤ÇÏ·Á¸é , ´Ü¼øÇÑ ¹®ÀÚ¿­ÀÇ ¹è¿­À» »ç¿ëÇÏ´ÂÁö, ȤÀº ¿¬»ó ¹è¿­·Î ¾Ù¸®¾î½º(alias)¿Í Ä÷³¸íÀ» ´ëÀÀ½Ãŵ´Ï´Ù. ÃëµæÇÏ°í ½ÍÀº Ä÷³ÀÌ Çϳª¸¸ÀÇ °æ¿ì·Î ¾Ù¸®¾î½º(alias)¸¦ »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì´Â, ¹è¿­Àº ¾Æ´Ï°í ´Ü¼øÇÑ ¹®ÀÚ¿­·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

ÇÏ´ÃÀÇ ¹è¿­À» Ä÷³ÀÇ Àμö·Î¼­ ÁöÁ¤Çϸé, ´ëÀÀÇÏ´Â Å×ÀÌºí¿¡¼­ÀÇ Ä÷³Àº °á°ú ¼¼Æ®¿¡ Æ÷ÇÔµÇÁö ¾Ê°Ô µË´Ï´Ù. join() ¸Þ¼ÒµåÀÇ Äڵ忹 (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

Ä÷³¸íÀ» "correlationName.columnName" ÀÇ Çü½Ä¿¡¼­ ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.ÀÌ °æ¿ì, Zend_Db_Select (Àº)´Â °¢ ºÎºÐÀ» °³º°ÀûÀ¸·Î ÄíÆ® ÇÕ´Ï´Ù. Ä÷³ÀÇ correlationName (»ó°ü¸í) (À»)¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ì´Â, ÇöÀçÀÇ from() ¸Þ¼Òµå·Î ÁöÁ¤ÇÑ Å×À̺íÀÇ À̸§À» »ç¿ëÇÕ´Ï´Ù.

·Ê 10.48. Ä÷³À» ÁöÁ¤ÇÏ´Â ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", p."product_name"
//   FROM "products" AS p

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id''product_name'));

// °°Àº Äõ¸®¸¦, »ó°ü¸íÀ» ÁöÁ¤ÇØ ÀÛ¼ºÇÕ´Ï´Ù
//   SELECT p."product_id", p."product_name"
//   FROM "products" AS p

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'p.product_id''p.product_name'));

// ÀÌ Äõ¸®¸¦, Ä÷³ÀÇ Çϳª¿¡ ¾Ù¸®¾î½º(alias)¸¦ ÁöÁ¤ÇØ ÀÛ¼ºÇÕ´Ï´Ù
//   SELECT p."product_id" AS prodno, p."product_name"
//   FROM "products" AS p

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'prodno' => 'product_id''product_name'));

10.4.3.3. ½Ä¿¡ ÀÇÇÑ Ä÷³ÀÇ Ãß°¡

SQL Äõ¸®¿¡¼­´Â, ´ÜÁö Å×À̺íÀÇ Ä÷³À» »ç¿ëÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¾î¶°ÇÑ ½ÄÀ» Ä÷³À¸·Î¼­ »ç¿ëÇϱ⵵ ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì´Â, »ó°ü¸íÀ» ºÎ·Ï ÄíÆ®¸¦ Àû¿ëÇϰųª ÇØ¼­´Â ¾ÈµË´Ï´Ù. Ä÷³ ¹®ÀÚ¿­¿¡ °ýÈ£°¡ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì¿¡,Zend_Db_Select (Àº)´Â ±×°ÍÀ» ½ÄÀ¸·Î¼­ Ãë±ÞÇÕ´Ï´Ù.

Zend_Db_Expr ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ ¸í½ÃÀûÀ¸·Î ÀÛ¼ºÇØ, ¹®ÀÚ¿­ÀÌ Ä÷³¸íÀ¸·Î ÇØ¼®µÇ¾î ¹ö¸®´Â °ÍÀ» ¸·À» ¼öµµ ÀÖ½À´Ï´Ù. Zend_Db_Expr (Àº)´Â, ¹®ÀÚ¿­À» Çϳª¸¸ Æ÷ÇÔÇÑ ÃÖ¼ÒÇÑÀÇ Å¬·¡½ºÀÔ´Ï´Ù. Zend_Db_Select ÇÏ Zend_Db_Expr ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ ÀνÄÇØ, ±×°ÍÀ» ¹®ÀÚ¿­·Î º¯È¯ÇÕ´Ï´Ù¸¸, ±× ¶§¿¡ ÄíÆ®³ª »ó°ü¸íµîÀÇ Ã³¸®¸¦ Àû¿ëÇÏÁö ¾Ê½À´Ï´Ù.

[ÁÖÀÇ] ÁÖÀÇ

Ä÷³À¸·Î¼­ »ç¿ëÇÏ´Â ½Ä¿¡ °ýÈ£°¡ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì´Â, Ä÷³¸íÀ¸·Î Zend_Db_Expr (À»)¸¦ ÁöÁ¤ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. Zend_Db_Select (Àº)´Â, °ýÈ£¸¦ ¹ß°ßÇϸé ÀÚµ¿ÀûÀ¸·Î ±× ¹®ÀÚ¿­À» ½ÄÀ¸·Î¼­ Ãë±ÞÇÕ´Ï´Ù. ÄíÆ®³ª »ó°ü¸íÀÇ ¼³Á¤Àº µÇÁö ¾Ê½À´Ï´Ù.

·Ê 10.49. ½ÄÀ» Æ÷ÇÔÇÑ Ä÷³ÀÇ ÁöÁ¤ÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", LOWER(product_name)
//   FROM "products" AS p
// °ýÈ£Æ÷ÇÔÀÇ ½ÄÀº, ¾Ï¹¬Áß¿¡
// Zend_Db_Expr (À¸)·Î¼­ ´Ù·ç¾îÁý´Ï´Ù

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id''LOWER(product_name)'));

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", (p.cost * 1.08) AS cost_plus_tax
//   FROM "products" AS p

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id''cost_plus_tax' => '(p.cost * 1.08)'));

// ÀÌ Äõ¸®¸¦, ¸í½ÃÀûÀ¸·Î Zend_Db_Expr (À»)¸¦ ÁöÁ¤ÇØ ÀÛ¼ºÇÕ´Ï´Ù
//   SELECT p."product_id", p.cost * 1.08 AS cost_plus_tax
//   FROM "products" AS p

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id''cost_plus_tax' => new Zend_Db_Expr('p.cost * 1.08')));

À§ÀÇ ¿¹¿¡¼­´Â,Zend_Db_Select ÇÏ »ó°ü¸íÀÇ ¼³Á¤À̳ª ½Äº°ÀÚÀÇ ÄíÆ®¶ó°í Çϴ ó¸®¸¦ ½Ç½ÃÇÏÁö ¾Ê½À´Ï´Ù. ¾Ö¸ÅÇÔÀ» ÇØ°áÇϱâ À§Çؼ­ ±×·¯ÇÑ Ã³¸®°¡ ÇÊ¿äÇÑ °æ¿ì´Â, ¼öµ¿À¸·Î ¹®ÀÚ¿­À» º¯°æÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

Ä÷³¸íÀÌ SQL Ű¿öµå³ª Ư¼ö ¹®ÀÚ¸¦ Æ÷ÇÔÇϰí ÀÖ´Â °æ¿ì´Â, ¾î´ðÅÍÀÇ quoteIdentifier() ¸Þ¼Òµå¸¦ »ç¿ëÇØ °á°ú¸¦ Á¶ÀÛÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. quoteIdentifier() (Àº)´Â, ½Äº°ÀÚ¿¡ ´ëÇØ¼­ SQL ÀÇ ÄíÆ® 󸮸¦ ½Ç½ÃÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ Å×À̺íÀ̳ª Ä÷³À̶ó°í ÇÏ´Â ½Äº°ÀÚ¸¦ SQL ÀÇ ±× ÀÌ¿ÜÀÇ ºÎºÐ°ú ±¸º°ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

ÄíÆ® 󸮸¦ Á÷Á¢ ¹®ÀÚ¿­¿¡ ¹¯¾î ¹ö¸®Áö ¾Ê°í quoteIdentifier() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î, ´ç½ÅÀÇ Äڵ带 µ¥ÀÌŸº£À̽º¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â °ÍÀ¸·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¸´Ù°í ÇÏ´Â °Íµµ,RDBMS ¿¡ µû¶ó¼­´Â º°·Î Ç¥ÁØÀûÀÌ ¾Æ´Ñ ¹®ÀÚ·Î ÄíÆ®¸¦ ½Ç½ÃÇÏ´Â °Íµµ Àֱ⠶§¹®ÀÔ´Ï´Ù. quoteIdentifier() ¸Þ¼Òµå´Â, ¾î´ðÅÍÀÇ ÇüÅ¿¡ µû¶ó ÀûÀýÇÑ ÄíÆ® ¹®ÀÚ¸¦ »ç¿ëÇϵµ·Ï(µíÀÌ) ¼³°èµÇ°í ÀÖ½À´Ï´Ù. quoteIdentifier() ¸Þ¼Òµå´Â ¶Ç, ½Äº°ÀÚÀÇ À̸§¾È¿¡ µîÀåÇÏ´Â ÄíÆ® ¹®ÀÚ ÀÚüµµ À̽ºÄÉÀÌÇÁ ÇÕ´Ï´Ù.

·Ê 10.50. ½Ä¾ÈÀÇ Ä÷³À» ÄíÆ® ÇÏ´Â ¿¹


<?php

// ÀÌ Äõ¸®¸¦ ÀÛ¼ºÇÒ ¶§¿¡, ½Ä¾È¿¡ Àִ Ưº°ÇÑ Ä÷³¸í "from" (À»)¸¦ ÄíÆ® ÇÕ´Ï´Ù
//   SELECT p."from" + 10 AS origin
//   FROM "products" AS p

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'origin' => '(p.' $db->quoteIdentifier('from') . ' + 10)'));

10.4.3.4. JOIN ¿¡ ÀÇÇÑ, Äõ¸®¿¡ÀÇ ´Ù¸¥ Å×À̺íÀÇ Ãß°¡

À¯¿ëÇÑ Äõ¸®ÀÇ »ó´ç¼ö´Â,JOIN (À»)¸¦ »ç¿ëÇØ º¹¼ö Å×À̺íÀÇ ÇàÀ» °áÇÕÇϰí ÀÖ½À´Ï´Ù. Å×À̺íÀ» Zend_Db_Select Äõ¸®¿¡ Ãß°¡ÇÏ·Á¸é , join() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ »ç¿ë¹ýÀº from() ¸Þ¼Òµå¿Í ´à¾Æ ÀÖ½À´Ï´Ù¸¸, ´ëºÎºÐÀÇ °æ¿ì¿¡ °áÇÕ Á¶°ÇÀ» ÁöÁ¤ÇÑ´Ù°í ÇÏ´Â Á¡ÀÌ ´Ù¸¨´Ï´Ù.

·Ê 10.51. join() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", p."product_name", l.*
//   FROM "products" AS p JOIN "line_items" AS l
//     ON p.product_id = l.product_id

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id''product_name'))
    ->
join(array('l' => 'line_items'),
        
'p.product_id = l.product_id');

join() ÀÇ µÎ¹øÂ°ÀÇ Àμö·Î¼­ °áÇÕ Á¶°ÇÀ» ¹®ÀÚ¿­·Î ÁöÁ¤ÇÕ´Ï´Ù.À̰ÍÀº, ¾î´À Å×À̺íÀÇ ÇàÀÌ ´Ù¸¥ Å×À̺íÀÇ ¾î´À ÇàÀ¸·Î ´ëÀÀÇÏ´ÂÁö¸¦ ³ªÅ¸³»´Â Á¶°Ç½ÄÀÔ´Ï´Ù. ½Ä Áß(¾È)¿¡¼­´Â »ó°ü¸íÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

[ÁÖÀÇ] ÁÖÀÇ

°áÇÕ Á¶°ÇÀ¸·Î ÁöÁ¤ÇÑ ½Ä¿¡ °üÇØ¼­´Â, ÄíÆ® 󸮴 ÇàÇØÁöÁö ¾Ê½À´Ï´Ù. ÄíÆ® ÇÒ Çʿ䰡 ÀÖ´Â Ä÷³¸íÀ» »ç¿ëÇÏ´Â °æ¿ì´Â, °áÇÕ Á¶°ÇÀÇ ¹®ÀÚ¿­À» ÀÛ¼ºÇÒ ¶§¿¡ quoteIdentifier() (À»)¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

join() ÀÇ 3¹øÂ°ÀÇ Àμö´Â Ä÷³¸íÀ» ³ªÅ¸³»´Â ¹è¿­ÀÔ´Ï´Ù. À̰ÍÀº from() ¸Þ¼Òµå·Î »ç¿ëÇÏ´Â Çü½Ä°ú ´à¾Æ ÀÖ½À´Ï´Ù. µðÆúÆ®´Â "*" ÀÔ´Ï´Ù. »ó°ü¸íÀ̳ª ½Ä,Zend_Db_Expr ¿¡ ´ëÇÑ Ãë±ÞÀº, from() ¸Þ¼Òµå¿¡ À־ÀÇ Ä÷³¸íÀÇ ¹è¿­°ú °°½À´Ï´Ù.

Å×ÀÌºí¿¡¼­ Ä÷³À» ÃëµæÇÏÁö ¾Ê´Â °æ¿ì´Â, Ä÷³ ¸®½ºÆ®¿¡ ÇÏ´ÃÀÇ ¹è¿­À» »ç¿ëÇÕ´Ï´Ù. À̰ÍÀº from() ¸Þ¼Òµå¿¡¼­µµ¿Í °°ÀÌ µ¿ÀÛÇÕ´Ï´Ù¸¸, º¸ÅëÀº ÃÖÃÊÀÇ Å×ÀÌºí¿¡¼­´Â ¾î¶°ÇÑ Ä÷³À» ÃëµæÇϰÚÁö¿ä. ÇÑÆí, ¿¬°áÇÏ´Â Å×ÀÌºí¿¡ ´ëÇØ¼­´Â Ä÷³À» ÃëµæÇÏÁö ¾Ê´Â °Íµµ ÀÖ½À´Ï´Ù.

·Ê 10.52. Ä÷³À» ÁöÁ¤ÇÏÁö ¾Ê´Â ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", p."product_name"
//   FROM "products" AS p JOIN "line_items" AS l
//     ON p.product_id = l.product_id

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id''product_name'))
    ->
join(array('l' => 'line_items'),
        
'p.product_id = l.product_id',
        array() ); 
// ÇÏ´ÃÀÇ Ä÷³ ¸®½ºÆ®

À§ÀÇ ¿¹·Î, ¿¬°áÇÑ Å×À̺íÀÇ Ä÷³ À϶÷ÀÇ Àå¼Ò¿¡ ÇÏ´ÃÀÇ ¹è¿­ array() (À»)¸¦ ÁöÁ¤ÇØ ÀÖ´Â °Í¿¡ ÁÖÀÇÇսôÙ.


SQL ÀÇ °áÇÕ¿¡´Â ¸î°³ÀÇ Çü½ÄÀÌ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡,Zend_Db_Select ÇÏÁö¸¸ ¼­Æ÷Æ®ÇÏ´Â °áÇÕÀÇ Çü½ÄÀ» Á¤¸®ÇÕ´Ï´Ù.

  • join(table, join, [columns]) ¸Þ¼Òµå ȤÀº joinInner(table, join, [columns]) ¸Þ¼Òµå¿¡ ÀÇÇÑ´Ù INNER JOIN

    À̰ÍÀº °¡Àå ÀϹÝÀûÀÎ °áÇÕ Çü½ÄÀÔ´Ï´Ù.°¢ Å×À̺íÀÇ ÇàÀ», ÁöÁ¤ÇÑ °áÇÕ Á¶°Ç¿¡ ±Ù°ÅÇØ ºñ±³ÇÕ´Ï´Ù. °á°ú ¼¼Æ®¿¡´Â, ±× °áÇÕ Á¶°ÇÀ» ä¿ì´Â ÇุÀÌ Æ÷ÇԵ˴ϴÙ. Á¶°ÇÀ» ä¿ì´Â ÇàÀÌ ¾ø´Â °æ¿ì´Â, °á°ú ¼¼Æ®°¡ ºñ¿ì±âµµ ÇÕ´Ï´Ù.

    ¸ðµç RDBMS ÇÏÁö¸¸, ÀÌ °áÇÕ Çü½Ä¿¡ ´ëÀÀÇϰí ÀÖ½À´Ï´Ù.

  • joinLeft(table, condition, [columns]) ¸Þ¼Òµå¿¡ ÀÇÇÑ´Ù LEFT JOIN

    ÁÂÃøÀÇ Å×À̺íÀÇ ¸ðµç Çà°ú ¿ìÃøÀÇ Å×À̺íÀÇ Á¶°Ç¿¡ ¸ÅÄ¡ÇÏ´Â ÇàÀÌ Æ÷ÇԵ˴ϴÙ. ¿ìÃøÀÇ Å×ÀÌºí¿¡¼­ÀÇ Ä÷³ °¡¿îµ¥, ÁÂÃøÀÇ Å×ÀÌºí¿¡ ´ëÀÀÇÏ´Â ÇàÀÌ ¾ø´Â °Í¿¡ ´ëÇØ¼­´Â NULL ±×¸®°í ¹¯Èü´Ï´Ù.

    ¸ðµç RDBMS ÇÏÁö¸¸, ÀÌ °áÇÕ Çü½Ä¿¡ ´ëÀÀÇϰí ÀÖ½À´Ï´Ù.

  • joinRight(table, condition, [columns]) ¸Þ¼Òµå¿¡ ÀÇÇÑ´Ù RIGHT JOIN

    ¿À¸¥ÂÊ ¿ÜºÎ °áÇÕÀº, ¿ÞÂÊ ¹Ù±ùºÎ °áÇÕÀ» º¸¿ÏÇÏ´Â °ÍÀÔ´Ï´Ù. ¿ìÃøÀÇ Å×À̺íÀÇ ¸ðµç Çà°ú ÁÂÃøÀÇ Å×À̺íÀÇ Á¶°Ç¿¡ ¸ÅÄ¡ÇÏ´Â ÇàÀÌ Æ÷ÇԵ˴ϴÙ. ÁÂÃøÀÇ Å×ÀÌºí¿¡¼­ÀÇ Ä÷³ °¡¿îµ¥, ¿ìÃøÀÇ Å×ÀÌºí¿¡ ´ëÀÀÇÏ´Â ÇàÀÌ ¾ø´Â °Í¿¡ ´ëÇØ¼­´Â NULL ±×¸®°í ¹¯Èü´Ï´Ù.

    RDBMS ¿¡ µû¶ó¼­´Â, ÀÌ °áÇÕ Çü½Ä¿¡ ´ëÀÀÇϰí ÀÖÁö ¾Ê´Â °Íµµ ÀÖ½À´Ï´Ù. ±×·¯³ª, ÀϹÝÀûÀ¸·Î ¿À¸¥ÂÊ ¿ÜºÎ °áÇÕÀº, Å×À̺íÀÇ Â÷·Ê¸¦ ¹Ù²ã ³ÖÀ¸¸é ¿ÞÂÊ ¹Ù±ùºÎ °áÇÕÀ¸·Î¼­ ³ªÅ¸³»´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù.

  • joinFull(table, condition, [columns]) ¸Þ¼Òµå¿¡ ÀÇÇÑ´Ù FULL JOIN

    ¿ÏÀü ¿ÜºÎ °áÇÕÀº, ¿ÞÂÊ ¹Ù±ùºÎ °áÇÕ°ú ¿À¸¥ÂÊ ¿ÜºÎ °áÇÕÀ» Á¶ÇÕÇÑ °Í °°Àº °ÍÀÔ´Ï´Ù. ¾çÃøÀÇ Å×À̺íÀÇ ¸ðµç ÇàÀÌ Æ÷ÇԵ˴ϴÙ. °áÇÕ Á¶°ÇÀ» ä¿ì´Â Æí¼ºÀÌ ÀÖ¾úÀ» °æ¿ì´Â ±×°ÍµéÀÌ µ¿ÀÏÇà¿¡ Á¤¸®ÇØ ±× ÀÌ¿ÜÀÇ °æ¿ì´Â, ´ëÀÀÇÏ´Â µ¥ÀÌÅͰ¡ ¾ø´Â Ä÷³¿¡ ´ëÇØ¼­´Â NULL ±×¸®°í ¹¯Èü´Ï´Ù.

    RDBMS ¿¡ µû¶ó¼­´Â, ÀÌ °áÇÕ Çü½Ä¿¡ ´ëÀÀÇϰí ÀÖÁö ¾Ê´Â °Íµµ ÀÖ½À´Ï´Ù.

  • joinCross(table, [columns]) ¸Þ¼Òµå¿¡ ÀÇÇÑ´Ù CROSS JOIN

    Å©·Î½º °áÇÕ°ú´Â, µ¥Ä«¸£Æ®ÀûÀÔ´Ï´Ù. ÃÖÃÊÀÇ Å×À̺íÀÇ °¢ Çà¿¡ ´ëÇØ¼­, µÎ¹øÂ°ÀÇ Å×À̺íÀÇ ¸ðµç ÇàÀÌ ¸ÅÄ¡ÇÕ´Ï´Ù. Áï, °á°ú ¼¼Æ®ÀÇ Çà¼ö´Â, µÎ Å×À̺íÀÇ Çà¼öÀÇ Àû°ú µ¿ÀÏÇØÁý´Ï´Ù. °á°ú ¼¼Æ®¸¦ ÇÊÅ͸µ ÇÏ·Á¸é ,WHERE ±¸·Î Á¶°ÇÀ» ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¹æ¹ý¿¡ µû¸£´Â Å©·Î½º °áÇÕÀº, ¿¾ SQL-89 ÀÇ °áÇÕ ±¸¹®°ú ´à¾Æ ÀÖ½À´Ï´Ù.

    joinCross() ¸Þ¼Òµå¿¡´Â, °áÇÕ Á¶°ÇÀ» ÁöÁ¤ÇÏ´Â ÆÄ¶ó¹ÌÅͰ¡ ¾ø½À´Ï´Ù. RDBMS ¿¡ µû¶ó¼­´Â, ÀÌ °áÇÕ Çü½Ä¿¡ ´ëÀÀÇϰí ÀÖÁö ¾Ê´Â °Íµµ ÀÖ½À´Ï´Ù.

  • joinNatural(table, [columns]) ¸Þ¼Òµå¿¡ ÀÇÇÑ´Ù NATURAL JOIN

    ÀÚ¿¬ °áÇÕÀº, ¾çÂÊ ¸ðµÎÀÇ Å×ÀÌºí¿¡ °°Àº À̸§À¸·Î µîÀåÇÏ´Â Ä÷³À» ºñ±³ÇÕ´Ï´Ù. ºñ±³´Â ¸ðµç Ä÷³¿¡ ´ëÇØ¼­ ÇàÇØÁý´Ï´Ù. ÀÌ API ±×¸®°í ¼­Æ÷Æ®Çϰí ÀÖ´Â °ÍÀº, ÀÚ¿¬ ³»ºÎ °áÇÕ¸¸ÀÔ´Ï´Ù. SQL ±×¸®°í ÀÚ¿¬ ¿ÜºÎ °áÇÕÀÌ ¼­Æ÷Æ®µÇ°í ÀÖ¾ú´Ù°í ÇØµµ, »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.

    joinNatural() ¸Þ¼Òµå¿¡´Â, °áÇÕ Á¶°ÇÀ» ÁöÁ¤ÇÏ´Â ÆÄ¶ó¹ÌÅÍ´Â ¾ø½À´Ï´Ù.

ÀÌ·¯ÇÑ °áÇÕ ¸Þ¼Òµå¿¡ °¡¼¼ÇØ Äõ¸®¸¦ ´Ü¼øÇÏ°Ô Çϱâ À§Çؼ­ JoinUsing ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.¿ÏÀüÇÑ °áÇÕ Á¶°ÇÀ» °Ç³×ÁÖ´Â ´ë½Å¿¡, ´Ü¼øÇÏ°Ô °áÇÕÇÏ´Â Ä÷³¸íÀÇ ¹è¿­À» °Ç³×ÁÖ¾î ÁÖ¸é Zend_Db_Select ¿ÀºêÁ§Æ®°¡ °áÇÕ Á¶°ÇÀ» ÀÛ¼ºÇØ ÁÝ´Ï´Ù.

·Ê 10.53. joinUsing() ¸Þ¼ÒµåÀÇ ¿¹


<?php
// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT *
//   FROM "table1"
//   JOIN "table2"
//   ON "table1".column1 = "table2".column1
//   WHERE column2 = 'foo'

$select $db->select()
    ->
from('table1')
    ->
joinUsing('table2''column1')
    ->
where('column2 = ?''foo');

Zend_Db_Select ÀÇ °áÇÕ ¸Þ¼Òµå¿¡´Â, °¢°¢ ´ëÀÀÇÑ´Ù 'using' ¸Þ¼Òµå°¡ ÀÖ½À´Ï´Ù.

  • joinUsing(table, join, [columns]) ¹× joinInnerUsing(table, join, [columns])

  • joinLeftUsing(table, join, [columns])

  • joinRightUsing(table, join, [columns])

  • joinFullUsing(table, join, [columns])

10.4.3.5. WHERE ±¸ÀÇ Ãß°¡

°á°ú ¼¼Æ®ÀÇ ÇàÀ» Á¦ÇÑÇϱâ À§ÇÑ Á¶°ÇÀ» ÁöÁ¤ÇÏ·Á¸é where() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ ÃÖÃÊÀÇ Àμö´Â SQL ÀÇ ½Ä¿¡¼­, À̰ÍÀ» Äõ¸®ÀÇ SQL ±×¸®°í WHERE ±¸·Î¼­ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.54. where() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE price > 100.00

$select $db->select()
    ->
from(
        
'products',
        array(
'product_id''product_name''price'))
    ->
where('price > 100.00');

[ÁÖÀÇ] ÁÖÀÇ

where() ¸Þ¼Òµå³ª orWhere() ¸Þ¼Òµå·Î ÁöÁ¤ÇÏ´Â ½Ä¿¡´Â ÄíÆ® 󸮴 ÇàÇØÁöÁö ¾Ê½À´Ï´Ù. ÄíÆ® ÇÒ Çʿ䰡 ÀÖ´Â Ä÷³¸íÀ» »ç¿ëÇÏ´Â °æ¿ì´Â, Á¶°ÇÀÇ ¹®ÀÚ¿­À» ÀÛ¼ºÇÒ ¶§¿¡ quoteIdentifier() (À»)¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

where() ¸Þ¼ÒµåÀÇ µÎ¹øÂ°ÀÇ Àμö´Â ¿É¼ÇÀÔ´Ï´Ù. À̰ÍÀº ½ÄÀ» ¿Å°Ü³õ´Â °ªÀÌ µË´Ï´Ù. Zend_Db_Select (Àº)´Â °ªÀ» ÄíÆ® ÇØ, ½Ä¾ÈÀÇ Àǹ® ºÎÈ£ ("?") (À»)¸¦ ±× °ªÀ¸·Î ¿Å°Ü³õ½À´Ï´Ù.

ÀÌ ¸Þ¼Òµå´Â ÆÄ¶ó¹ÌÅ͸¦ Çϳª¸¸ ¹Þ½À´Ï´Ù. º¹¼öÀÇ °ªÀ» ġȯÇÒ Çʿ䰡 ÀÖ´Â °æ¿ì´Â, ¹®ÀÚ¿­À» ½º½º·Î Æ÷¸Ë ÇØ, °ªÀÇ »ðÀÔÀ̳ª ÄíÆ®¸¦ ½º½º·Î ½Ç½ÃÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

·Ê 10.55. where() ¸Þ¼Òµå·ÎÀÇ ÆÄ¶ó¹ÌÅÍÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (price > 100.00)

$minimumPrice 100;

$select $db->select()
    ->
from(
        
'products',
        array(
'product_id''product_name''price'))
    ->
where('price > ?'$minimumPrice);

Zend_Db_Select ¿ÀºêÁ§Æ®»ó¿¡¼­,where() ¸Þ¼Òµå¸¦ ¿©·¯ Â÷·Ê ½ÇÇàÇÒ ¼öµµ ÀÖ½À´Ï´Ù.±× °á°úÀÇ Äõ¸®´Â, ÁöÁ¤ÇÑ Á¶°ÇÀ» AND ±×¸®°í Çϳª¿¡ Áý°èÇÑ °ÍÀÌ µË´Ï´Ù.

·Ê 10.56. º¹¼öÀÇ where() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (price > 100.00)
//     AND (price < 500.00)

$minimumPrice 100;
$maximumPrice 500;

$select $db->select()
    ->
from('products',
        array(
'product_id''product_name''price'))
    ->
where('price > ?'$minimumPrice)
    ->
where('price < ?'$maximumPrice);

º¹¼öÀÇ Á¶°ÇÀ» OR ±×¸®°í ¿¬°áÇÏ°í ½ÍÀº °æ¿ì´Â, orWhere() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ »ç¿ë¹ýÀº where() ¸Þ¼Òµå¿Í °ÅÀÇ °°½À´Ï´Ù¸¸, Á¶°ÇÀÇ Àü¿¡´Â AND (Àº)´Â ¾Æ´Ï°í OR ÇÏÁö¸¸ ºÙ°Ô µË´Ï´Ù.

·Ê 10.57. orWhere() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (price < 100.00)
//     OR (price > 500.00)

$minimumPrice 100;
$maximumPrice 500;

$select $db->select()
    ->
from('products',
        array(
'product_id''product_name''price'))
    ->
where('price < ?'$minimumPrice)
    ->
orWhere('price > ?'$maximumPrice);

Zend_Db_Select (Àº)´Â,where() ¸Þ¼Òµå³ª orWhere() ¸Þ¼Òµå·Î ÁöÁ¤ÇÑ ½ÄÀÇ ¾çÃøÀ¸·Î ÀÚµ¿ÀûÀ¸·Î °ýÈ£¸¦ ºÙÀÔ´Ï´Ù.À̰Ϳ¡ ÀÇÇØ, ³í¸® ¿¬»êÀÚ°¡ ¿¹±âÄ¡ ¸øÇÑ °á°ú¸¦ ÀÏÀ¸Å°´Â °ÍÀ» ¸·½À´Ï´Ù.

·Ê 10.58. ³í¸®½ÄÀ» °ýÈ£·Î µÑ·¯½Î´Â ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (price < 100.00 OR price > 500.00)
//     AND (product_name = 'Apple')

$minimumPrice 100;
$maximumPrice 500;
$prod 'Apple';

$select $db->select()
    ->
from('products',
        array(
'product_id''product_name''price'))
    ->
where("price < $minimumPrice OR price > $maximumPrice")
    ->
where('product_name = ?'$prod);

À§ÀÇ ¿¹¿¡¼­´Â, °ýÈ£°¡ ¾øÀ¸¸é °á°ú´Â ¿ÏÀüÈ÷ ´Ù¸¥ °ÍÀÌ µË´Ï´Ù. ¿Ö³ÄÇϸé,AND ÂÊÀÌ OR º¸´Ù ¿ì¼± ¼øÀ§°¡ ³ô±â ¶§¹®ÀÔ´Ï´Ù.Zend_Db_Select (Àº)´Â °ýÈ£¸¦ ºÙÀ̹ǷÎ, °¢°¢ÀÇ where() ±×¸®°í ÁöÁ¤µÈ ½ÄÀÇ °áÇÕµµ°¡ AND º¸´Ù ³ô¾ÆÁý´Ï´Ù.

10.4.3.6. GROUP BY ±¸ÀÇ Ãß°¡

SQL ±×¸®°í GROUP BY ±¸¸¦ »ç¿ëÇϸé, °á°ú ¼¼Æ®ÀÇ Çà¼ö¸¦ ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù. GROUP BY ±¸·Î ÁöÁ¤ÇÑ Ä÷³ÀÇ ÀÏÀÇÀÎ °ª ¸¶´Ù, °á°ú°¡ ÀÏÇà¿¡ Á¤¸®ÇÕ´Ï´Ù.

Zend_Db_Select ±×·³, ÇàÀÇ ±×·ìÈ­¸¦ ÇàÇϱâ À§ÇÑ Ä÷³À» group() ¸Þ¼Òµå·Î ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå¿¡ÀÇ Àμö´Â,GROUP BY ±¸·Î »ç¿ëÇÏ´Â Ä÷³ ȤÀº º¹¼ö Ä÷³ÀÇ ¹è¿­ÀÌ µË´Ï´Ù.

·Ê 10.59. group() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", COUNT(*) AS line_items_per_product
//   FROM "products" AS p JOIN "line_items" AS l
//     ON p.product_id = l.product_id
//   GROUP BY p.product_id

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id'))
    ->
join(array('l' => 'line_items'),
        
'p.product_id = l.product_id',
        array(
'line_items_per_product' => 'COUNT(*)'))
    ->
group('p.product_id');

from() ¸Þ¼Òµå·ÎÀÇ Ä÷³ÀÇ ¹è¿­°ú °°ÀÌ, Ä÷³¸í¿¡´Â »ó°ü¸íÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.¶Ç, Ä÷³¸íÀº ½Äº°Àڷμ­ ÄíÆ® µË´Ï´Ù. ´Ù¸¸, ¹®ÀÚ¿­¿¡ °ýÈ£°¡ Æ÷ÇԵǰųª Zend_Db_Expr ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ ÁöÁ¤Çϰųª ÇßÀ» °æ¿ì´Â º°µµÀÔ´Ï´Ù.

10.4.3.7. HAVING ±¸ÀÇ Ãß°¡

SQL ±×¸®°í HAVING ±¸¸¦ »ç¿ëÇϸé, ±×·ìÈ­ ÇÑ Çà¿¡ Á¦¾àÀ» Àû¿ëÇÕ´Ï´Ù.À̰ÍÀº, WHERE ±¸°¡ Çà¿¡ ´ëÇØ¼­ Á¦¾àÀ» Àû¿ëÇÏ´Â °Í°ú °°½À´Ï´Ù. ±×·¯³ª, À̰͵鿡´Â Â÷ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù. WHERE Á¶°ÇÀº ±×·ìÈ­ÀÇ Àü¿¡ Àû¿ëµË´Ï´Ù¸¸, HAVING Á¶°ÇÀº ±×·ìÈ­ µÈ ÈÄ¿¡ Àû¿ëµË´Ï´Ù.

Zend_Db_Select ±×·³, ±×·ì¿¡ ´ëÇÑ Á¦¾àÀ» ÁöÁ¤ÇÏ·Á¸é having() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ »ç¿ë¹ýÀº where() ¸Þ¼Òµå¿Í ´à¾Æ ÀÖ½À´Ï´Ù. ÃÖÃÊÀÇ Àμö°¡ SQL ÀÇ ½ÄÀ» Æ÷ÇÔÇÑ ¹®ÀÚ¿­ÀÔ´Ï´Ù.µÎ¹øÂ°ÀÇ Àμö´Â ¿É¼ÇÀ¸·Î, SQL ½Ä¾ÈÀÇ ÆÄ¶ó¹ÌÅÍ Ç÷¹À̽ºÈ¦´õ¸¦ ¿Å°Ü³õ´Â °ªÀÌ µË´Ï´Ù. having() (À»)¸¦ ¿©·¯ Â÷·Ê ½ÇÇàÇϸé, ±×·¯ÇÑ Á¶°ÇÀÌ ³í¸® ¿¬»êÀÚ AND ±×¸®°í ¿¬°áµË´Ï´Ù. orHaving() ¸Þ¼Òµå¸¦ »ç¿ëÇßÀ» °æ¿ì´Â, ³í¸® ¿¬»êÀÚ OR ±×¸®°í ¿¬°áµË´Ï´Ù.

·Ê 10.60. having() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", COUNT(*) AS line_items_per_product
//   FROM "products" AS p JOIN "line_items" AS l
//     ON p.product_id = l.product_id
//   GROUP BY p.product_id
//   HAVING line_items_per_product > 10

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id'))
    ->
join(array('l' => 'line_items'),
        
'p.product_id = l.product_id',
        array(
'line_items_per_product' => 'COUNT(*)'))
    ->
group('p.product_id')
    ->
having('line_items_per_product > 10');

[ÁÖÀÇ] ÁÖÀÇ

having() ¸Þ¼Òµå³ª orHaving() ¸Þ¼Òµå·Î ÁöÁ¤ÇÏ´Â ½Ä¿¡´Â ÄíÆ® 󸮴 ÇàÇØÁöÁö ¾Ê½À´Ï´Ù. ÄíÆ® ÇÒ Çʿ䰡 ÀÖ´Â Ä÷³¸íÀ» »ç¿ëÇÏ´Â °æ¿ì´Â, Á¶°ÇÀÇ ¹®ÀÚ¿­À» ÀÛ¼ºÇÒ ¶§¿¡ quoteIdentifier() (À»)¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

10.4.3.8. ORDER BY ±¸ÀÇ Ãß°¡

SQL ÀÇ ORDER BY ±¸¿¡¼­´Â, Äõ¸®ÀÇ °á°ú ¼¼Æ®°¡ ´Ã¾î³õ¾Æ ¹Ù²Ù¾îÀÇ ±âÁØÀÌ µÇ´Â Ä÷³À̳ª ½ÄÀ» ÁöÁ¤ÇÕ´Ï´Ù. º¹¼öÀÇ Ä÷³À» ÁöÁ¤Çϸé, ÃÖÃÊÀÇ Ä÷³ÀÇ °ªÀÌ °°¾Ò´ø °æ¿ì¿¡ µÎ¹øÂ°ÀÇ Ä÷³À» ÀÌ¿ëÇØ ´Ã¾î³õ¾Æ ¹Ù²Ù¾î¸¦ ½Ç½ÃÇÕ´Ï´Ù. µðÆúÆ®¿¡¼­´Â, ÀÛÀº ÆíÀ¸·ÎºÎÅÍ Å« ÆíÀ¸·Î ÇâÇØ ´Ã¾î³õ¾Æ ¹Ù²ß´Ï´Ù. ¹Ý´ë·Î Å« ÆíÀ¸·ÎºÎÅÍ ÀÛÀº ÆíÀ¸·Î ÇâÇØ ´Ã¾î³õ¾Æ ¹Ù²Ù·Á¸é , Ä÷³ ¸®½ºÆ®¾ÈÀÇ ±× Ä÷³¸íÀÇ µÚ¿¡, Ű¿öµå DESC (À»)¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

Zend_Db_Select ±×·³,order() ¸Þ¼Òµå¸¦ »ç¿ëÇØ ´Ã¾î³õ¾Æ ¹Ù²Ù¾îÀÇ ±âÁØÀÌ µÇ´Â Ä÷³ ȤÀº Ä÷³ÀÇ ¹è¿­À» ÁöÁ¤ÇÕ´Ï´Ù. ¹è¿­ÀÇ °¢ ¿ä¼Ò´Â Ä÷³¸íÀ» ³ªÅ¸³»´Â ¹®ÀÚ¿­ÀÔ´Ï´Ù.¿É¼ÇÀ¸·Î¼­ ½ºÆäÀ̽º¸¦ ³¢¿ö Ű¿öµå ASC (ÀÌ)³ª DESC (À»)¸¦ °è¼ÓÇÕ´Ï´Ù.

from() ¸Þ¼Òµå³ª group() ¸Þ¼Òµå¿Í °°ÀÌ, Ä÷³¸íÀº ½Äº°Àڷμ­ ÄíÆ® µË´Ï´Ù. ´Ù¸¸, ¹®ÀÚ¿­¿¡ °ýÈ£°¡ Æ÷ÇԵǰųª Zend_Db_Expr ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ ÁöÁ¤Çϰųª ÇßÀ» °æ¿ì´Â º°µµÀÔ´Ï´Ù.

·Ê 10.61. order() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", COUNT(*) AS line_items_per_product
//   FROM "products" AS p JOIN "line_items" AS l
//     ON p.product_id = l.product_id
//   GROUP BY p.product_id
//   ORDER BY "line_items_per_product" DESC, "product_id"

$select $db->select()
    ->
from(array('p' => 'products'),
        array(
'product_id'))
    ->
join(array('l' => 'line_items'),
        
'p.product_id = l.product_id',
        array(
'line_items_per_product' => 'COUNT(*)'))
    ->
group('p.product_id')
    ->
order(array('line_items_per_product DESC''product_id'));

10.4.3.9. LIMIT ±¸ÀÇ Ãß°¡

RDBMS ¿¡ µû¶ó¼­´Â,SQL (À»)¸¦ È®ÀåÇϰí, À̸¥¹Ù LIMIT ±¸¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù. À̰ÍÀº, °á°ú ¼¼Æ®ÀÇ Çà¼ö¸¦, ÃÖ´ë¿¡¼­µµ ÁöÁ¤ÇÑ ¼ö±îÁö Á¦ÇÑÇÕ´Ï´Ù. ¶Ç, Ãâ·ÂÀ» ½ÃÀÛÇϱâ Àü¿¡ ÀÐ¾î ³¯¸®´Â Çà¼ö¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇϸé, °á°ú ¼¼Æ®ÀÇ ÀϺθ¸À» ÃëµæÇÏ´Â °ÍÀÌ °£´ÜÇÏ°Ô µË´Ï´Ù. ¿¹¸¦ µé¾î, Äõ¸®ÀÇ °á°ú¸¦ ÆäÀÌÁö·Î ³ª´©¾î Ãâ·ÂÇÏ´Â °æ¿ì µî¿¡ Æí¸®ÇÕ´Ï´Ù.

Zend_Db_Select ±×·³,limit() ¸Þ¼Òµå¸¦ »ç¿ëÇØ °á°úÀÇ Çà¼ö ¹× ÀÐ¾î ºñÇØÀÇ Çà¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ ÃÖÃÊÀÇ Àμö´Â ÃëµæÇÏ°í ½ÍÀº Çà¼ö, ±×¸®°í µÎ¹øÂ°ÀÇ Àμö´Â ÀÐ¾î ³¯¸®´Â Çà¼ö°¡ µË´Ï´Ù.

·Ê 10.62. limit() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", p."product_name"
//   FROM "products" AS p
//   LIMIT 10, 20

$select $db->select()
    ->
from(array('p' => 'products'), array('product_id''product_name'))
    ->
limit(1020);

[ÁÖÀÇ] ÁÖÀÇ

LIMIT ±¸¹®Àº, ¸ðµç RDBMS ±×¸®°í ¼­Æ÷Æ®µÇ°í ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù.RDBMS ¿¡ µû¶ó¼­´Â, ´àÀº ±â´ÉÀ» ´Ù¸¥ ±¸¹®À¸·Î ¼­Æ÷Æ®Çϰí ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù. °¢ Zend_Db_Adapter_Abstract Ŭ·¡½º¿¡´Â, ±× RDBMS ¿¡ ´ëÀÀÇÑ ÀûÀýÇÑ SQL (À»)¸¦ ÀÛ¼ºÇÏ´Â ¸Þ¼Òµå°¡ ÁغñµÇ¾î ÀÖ½À´Ï´Ù.

ÇÑÆí,limitPage() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ´Â °Í¿¡ ÀÇÇØµµ Çà¼ö¿Í ¿ÀÇÁ¼ÂÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â, Äõ¸®ÀÇ °á°ú ¼¼Æ® Àüü·ÎºÎÅÍ Æ¯Á¤ÀÇ °³¼Ò°¡ ¿¬¼ÓÇÑ ÇุÀ» ÃëµæÇÏ´Â °ÍÀÔ´Ï´Ù. Áï, °á°úÀÇ ¡¸ÆäÀÌÁö¡¹¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ¸·Î, ±× ÆäÀÌÁö¿¡ ÇØ´çÇÏ´Â ºÎºÐÀÇ °á°ú¸¸À» ÃëµæÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. limitPage() ¸Þ¼ÒµåÀÇ ÃÖÃÊÀÇ Àμö¿¡ ÆäÀÌÁö¼ö, 2 ¹øÂ°ÀÇ Àμö¿¡ ÆäÀÌÁö ±ÙóÀÇ Çà¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¾î´À ÂÊÀÇ Àμöµµ Çʼö·Î, µðÆúƮġ´Â ¾ø½À´Ï´Ù.

·Ê 10.63. limitPage() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p."product_id", p."product_name"
//   FROM "products" AS p
//   LIMIT 10, 20

$select $db->select()
    ->
from(array('p' => 'products'), array('product_id''product_name'))
    ->
limitPage(210);

10.4.3.10. Äõ¸® ¼ö½ÄÀÚ DISTINCT ÀÇ Ãß°¡

distinct() ¸Þ¼Òµå¸¦ »ç¿ëÇϸé,SQL Äõ¸®¿¡ DISTINCT Ű¿öµå¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.

·Ê 10.64. distinct() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT DISTINCT p."product_name"
//   FROM "products" AS p

$select $db->select()
    ->
distinct()
    ->
from(array('p' => 'products'), 'product_name');

10.4.3.11. Äõ¸® ¼ö½ÄÀÚ FOR UPDATE ÀÇ Ãß°¡

forUpdate() ¸Þ¼Òµå¸¦ »ç¿ëÇϸé,SQL Äõ¸®¿¡ FOR UPDATE ¼ö½ÄÀÚ¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.

·Ê 10.65. forUpdate() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT FOR UPDATE p.*
//   FROM "products" AS p

$select $db->select()
    ->
forUpdate()
    ->
from(array('p' => 'products'));

10.4.4. Select Äõ¸®ÀÇ ½ÇÇà

ÀÌ ¸¶µð¿¡¼­´Â,Zend_Db_Select ¿ÀºêÁ§Æ®°¡ ³ªÅ¸³»´Â Äõ¸®¸¦ ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù.

10.4.4.1. Db ¾î´ðÅͷκÎÅÍÀÇ Select Äõ¸®ÀÇ ½ÇÇà

Zend_Db_Select ¿ÀºêÁ§Æ®°¡ ³ªÅ¸³»´Â Äõ¸®¸¦ ½ÇÇàÇÏ·Á¸é , ±×°ÍÀ» Zend_Db_Adapter_Abstract ¿ÀºêÁ§Æ®ÀÇ query() ¸Þ¼ÒµåÀÇ ÃÖÃÊÀÇ Àμö·Î¼­ °Ç³×ÁÝ´Ï´Ù.±×·¯ÀÚ(¸é), ¹®ÀÚ¿­ÀÇ Äõ¸®´ë½Å¿¡ Zend_Db_Select ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù.

query() ¸Þ¼Òµå´Â, ¾î´ðÅÍÀÇ ÇüÅ¿¡ ÀÇÇØ¼­ Zend_Db_Statement ȤÀº PDOStatement ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù.

·Ê 10.66. Db ¾î´ðÅÍÀÇ query() ¸Þ¼ÒµåÀÇ »ç¿ë¿¹


<?php

$select 
$db->select()
  ->
from('products');

$stmt $db->query($select);
$result $stmt->fetchAll();

10.4.4.2. ¿ÀºêÁ§Æ®·ÎºÎÅÍÀÇ Select Äõ¸®ÀÇ ½ÇÇà

¾î´ðÅÍ ¿ÀºêÁ§Æ®ÀÇ query() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â ÀÌ¿Ü ¹æ¹ýÀ¸·Î¼­´Â,Zend_Db_Select ¿ÀºêÁ§Æ®ÀÇ query() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ¾î´À ÂÊÀÇ ¸Þ¼Òµåµµ, ¾î´ðÅÍÀÇ ÇüÅ¿¡ ÀÇÇØ¼­ Zend_Db_Statement ȤÀº PDOStatement ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù.

·Ê 10.67. Select ¿ÀºêÁ§Æ®ÀÇ query ¸Þ¼ÒµåÀÇ »ç¿ë¿¹


<?php

$select 
$db->select()
    ->
from('products');

$stmt $select->query();
$result $stmt->fetchAll();

10.4.4.3. Select ¿ÀºêÁ§Æ®·ÎºÎÅÍ SQL ¹®ÀÚ¿­¿¡ÀÇ º¯È¯

Zend_Db_Select ¿ÀºêÁ§Æ®¿¡ ´ëÀÀÇÑ´Ù SQL Äõ¸® ¹®ÀÚ¿­¿¡ ¾×¼¼½º ÇÏ°í ½ÍÀº °æ¿ì´Â, __toString() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.68. __toString() ¸Þ¼ÒµåÀÇ ¿¹


<?php

$select 
$db->select()
    ->
from('products');

$sql $select->__toString();
echo 
"$sqln";

// Ãâ·ÂÀº, ´ÙÀ½°ú °°Àº ¹®ÀÚ¿­ÀÌ µË´Ï´Ù
//   SELECT * FROM "products"

10.4.5. ±× ¿ÜÀÇ ¸Þ¼Òµå

ÀÌ ¸¶µð¿¡¼­´Â, Áö±Ý±îÁö ÁÖ¾î ¿ÀÁö ¾Ê¾Ò´Ù Zend_Db_Select Ŭ·¡½ºÀÇ ¸Þ¼ÒµåÀÌ´Ù getPart() ¹× reset() ¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.

10.4.5.1. Select ¿ÀºêÁ§Æ®ÀÇ ÀϺÎÀÇ Ãëµæ

getPart() ¸Þ¼Òµå´Â,SQL Äõ¸®ÀÇ ÀϺθ¦ µ¹·ÁÁÝ´Ï´Ù. ¿¹¸¦ µé¾î, ÀÌ ¸Þ¼Òµå¸¦ »ç¿ëÇϸé, WHERE ±¸ÀÇ ½ÄÀ» ³ªÅ¸³»´Â ¹è¿­À̳ª SELECT ÇÏ´Â Ä÷³ (ȤÀº ½Ä) ÀÇ ¹è¿­, ¶Ç´Â LIMIT ±¸ÀÇ Ä«¿îÆ®³ª ¿ÀÇÁ¼ÂÀ» ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù.

µ¹¾Æ°¡ °ªÀº,SQL ÀÇ ÀϺθ¦ »©³½ ¹®ÀÚ¿­ÀÌ ¾Æ´Õ´Ï´Ù. ¿ÀºêÁ§Æ®·ÎÀÇ ³»ºÎ Ç¥ÇöÀ¸·Î, Åë»óÀº °ª°ú ½ÄÀ» Æ÷ÇÔÇÑ ¹è¿­ÀÌ µË´Ï´Ù. Äõ¸®ÀÇ °¢ ºÎºÐ¿¡ ÀÇÇØ¼­, ±× ±¸Á¶´Â ´Ù¸¨´Ï´Ù.

getPart() ¸Þ¼ÒµåÀÇ Àμö´Â Çϳª·Î, Select Äõ¸®ÀÇ ¾î´À ºÎºÐÀ» µ¹·ÁÁÖ´ÂÁö¸¦ ¿©±â¼­ ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ¹®ÀÚ¿­ 'from' (À»)¸¦ ÁöÁ¤Çϸé, Select ¿ÀºêÁ§Æ®°¡ FROM ±¸·Î¼­ º¸°ü À¯ÁöÇϰí ÀÖ´Â Å×À̺íÀÇ Á¤º¸¸¦ µ¹·ÁÁÝ´Ï´Ù. ¿©±â¿¡´Â °áÇÕÇϰí ÀÖ´Â ´Ù¸¥ Å×ÀÌºíµµ Æ÷ÇԵ˴ϴÙ.

Zend_Db_Select Ŭ·¡½º¿¡¼­´Â,SQL Äõ¸®ÀÇ °¢ ºÎºÐÀ» ÁöÁ¤Çϱâ À§ÇÑ Á¤¼ö¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ Á¤¼ö, ȤÀº ¸®ÅÍ·² ¹®ÀÚ¿­ÀÇ ¾î´ÀÂÊÀ̵çÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Ç¥ 10.2. getPart() ¹× reset() ±×¸®°í »ç¿ëÇÏ´Â Á¤¼ö

Á¤¼ö ¹®ÀÚ¿­Ä¡
Zend_Db_Select::DISTINCT 'distinct'
Zend_Db_Select::FOR_UPDATE 'forupdate'
Zend_Db_Select::COLUMNS 'columns'
Zend_Db_Select::FROM 'from'
Zend_Db_Select::WHERE 'where'
Zend_Db_Select::GROUP 'group'
Zend_Db_Select::HAVING 'having'
Zend_Db_Select::ORDER 'order'
Zend_Db_Select::LIMIT_COUNT 'limitcount'
Zend_Db_Select::LIMIT_OFFSET 'limitoffset'

·Ê 10.69. getPart() ¸Þ¼ÒµåÀÇ ¿¹


<?php

$select 
$db->select()
    ->
from('products')
    ->
order('product_id');

// ¹®ÀÚ¿­ ¸®ÅÍ·²À» »ç¿ëÇØ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù
$orderData $select->getPart'order' );

// °°Àº °ÍÀ», Á¤¼ö¸¦ ÀÌ¿ëÇØ ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù
$orderData $select->getPartZend_Db_Select::ORDER );

// µ¹¾Æ°¡ °ªÀº, ¹®ÀÚ¿­Àº ¾Æ´Ï°í ¹è¿­ÀÌ µË´Ï´Ù.
// °¢ ºÎºÐÀÌ ´Ù¸¥ ±¸Á¶°¡ µÇ¾î ÀÖ½À´Ï´Ù.
print_r$orderData );

10.4.5.2. Select ¿ÀºêÁ§Æ®ÀÇ ÀϺÎÀÇ ¸®¼ÂÆ®

reset() ¸Þ¼Òµå¸¦ »ç¿ëÇϸé, SQL Äõ¸®ÀÇ ÁöÁ¤ÇÑ ºÎºÐ¸¸À» ¼Ò°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. Àμö¸¦ »ý·« ÇßÀ» °æ¿ì´Â, ¸ðµç ºÎºÐÀ» ¼Ò°ÅÇÕ´Ï´Ù.

Àμö´Â Çϳª·Î, À̰ÍÀº »ý·« °¡´ÉÇÕ´Ï´Ù. ¼Ò°ÅÇÏ°í ½Í´Ù SQL ÀÇ ºÎºÐÀ»,getPart() ¸Þ¼ÒµåÀÇ Àμö¿Í °°Àº ¹®ÀÚ¿­·Î ÁöÁ¤ÇÕ´Ï´Ù. Äõ¸®ÀÇ ÁöÁ¤ÇÑ ºÎºÐÀÌ, µðÆúÆ® »óÅ·Πµ¹¾Æ¿É´Ï´Ù.

ÆÄ¶ó¹ÌÅ͸¦ »ý·« Çϸé,reset() (Àº)´Â Äõ¸®ÀÇ ¸ðµç ºÎºÐÀ» µðÆúÆ® »óÅ¿¡ µÇµ¹¸³´Ï´Ù. À̰Ϳ¡ ÀÇÇØ,Zend_Db_Select ¿ÀºêÁ§Æ®´Â Ãʱ⠻óÅÂ¿Í µ¿µîÇÏ°Ô µË´Ï´Ù. Áï, ÃÖÃÊ·Î ÀνºÅϽº¸¦ ÀÛ¼ºÇßÀ» ¶§¿Í °°Àº »óŶó°í ÇÏ´Â °ÍÀÔ´Ï´Ù.

·Ê 10.70. reset() ¸Þ¼ÒµåÀÇ ¿¹


<?php

// ¿Ï¼ºµÇ´Â Äõ¸®´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//   SELECT p.*
//   FROM "products" AS p
//   ORDER BY "product_name"

$select $db->select()
    ->
from(array('p' => 'products')
    ->
order('product_name');

// Á¶°ÇÀ» º¯°æÇØ, ´Ù¸¥ Ä÷³À¸·Î ³ª¶õÇØÁú ¼ö ÀÖ´Â ¹Ù²ß´Ï´Ù
//   SELECT p.*
//   FROM "products" AS p
//   ORDER BY "product_id"

// ÀçÁ¤ÀÇÇϱâ À§ÇØ(¶§¹®¿¡), ÇÑ ¹ø ÀÌ ºÎºÐÀ» ¼Ò°ÅÇÕ´Ï´Ù
$select->resetZend_Db_Select::ORDER );

// ±×¸®°í ´Ù¸¥ Ä÷³À» ÁöÁ¤ÇÕ´Ï´Ù
$select->order('product_id');

// Äõ¸® Àüü¸¦ ¼Ò°ÅÇÕ´Ï´Ù
$select->reset();