jimtrue์ Slack์ ํตํด ์ ์ถ๋ group by์ ๊ฐ๋ฅํ ๋ถ๋ฅ ๋ฌธ์
์ถ์ ์ ํ๋ณ๋ก ์ ๋ ฌ๋ ๋ค์ ์ ๋ชฉ๋ณ๋ก ์ ๋ ฌ๋ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์ถ์ ํฌ๋๋ ์ฌ์ฉ์ ์ง์ ๋ถ๋ฅ๋ฒ์
๋๋ค.
์ด๋ฒคํธ ํฌ๋๋ ์ฌ์ฉ์ ์ ์ ๊ฒ์๋ฌผ ์ ํ์
๋๋ค.
// assume weยดve got 6 events and 2 festivals
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1, 'groupby' => 'festival.name');
$events = pods('event', $params)
// output should be
Event 1 (Festival 1)
Event 3 (Festival 1)
Event 5 (Festival 1)
Event 2 (Festival 2)
Event 4 (Festival 2)
Event 6 (Festival 2)
// ... but is
Event 1 (Festival 1)
Event 2 (Festival 2)
์ ์ ํ ์คํธํ ํ ์ด๋ฒคํธ๊ฐ ์ถ์ ๋ถ๋ฅ๋ฅผ ๋์์ผ๋ก ํ๋ ํฌ๋ ๊ด๊ณ ํ๋๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ groupby ์์ด๋ง.
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
์ด๊ฒ์ ๋จ์ ์ ๋ถ๋ฅ๋ก์์ ์ถ์ ๊ด๊ณ๊ฐ wordpress์ ๋น ๋ฅธ ํธ์ง ์์์ ํตํด ๋ ์ด์ ์ ์ง๋ ์ ์๋ค๋ ๊ฒ์ ๋๋ค(์, ์ถ๊ฐ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ฐ๋ฅ)
์ถ๋ ฅ์
ํด์ผํ๋ค
Festival.name์ผ๋ก ๊ทธ๋ฃนํํ๋ฉด ์ถ์ ๋น ํ๋์ ๋ ์ฝ๋๋ง ํ์๋ฉ๋๋ค.
์ฐ๋์, ์ถ์ ๋ช ์, ํฌ์คํธ ์ ๋ชฉ ์์ผ๋ก ํ๊ณ ์ถ์ผ์์ฃ ?
์ด๊ฒ์ Slack #support์ ํ ๋ก ์์ ๊ฐ์ ธ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ Taxonomy๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธํ์ผ๋ฉฐ taxonomy.name์ orderby๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด๊ฒ์ด ์ฃผ๋ก ์ฐ๋ฆฌ๊ฐ ๋ฌธ์ ๋ก ํ
์คํธํ๋ ๊ฒ์
๋๋ค. orderby
๋ฌธ์ ๊ฐ ์๋์ง ์์๋ณด๊ธฐ ์ํด ์ง์ญ ํ
์คํธ๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ด๋ ๋ถ๋ฅ๋ฒ๊ณผ์ ๊ด๊ณ์ ๋ํ ๊ด๋ จ ๋ถ๋ฅ๋ฒ๊ณผ ๊ด๋ จ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ํ group by
๋ ์ค์ ๋ก๋ ์์ฝ ํฉ๊ณ ๊ณ์ฐ ๋ฐ ์ด์ ์ ์ฌํ ์ฉ๋๋ก๋ง ์ฌ์ฉํด์ผ ํ๋ค๋ ๋ฉ๋ชจ๋ฅผ ์์ฑํ๋ฉด ๊ทธ๋ฃน๋น ํ๋์ ํ๋ง ๋ฐํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. @sc0ttkclark ์ ์ ํ ์์ฝ ๊ณ์ฐ์ ์ํํ๊ธฐ ์ํด groupby๊ฐ 'fields' ๋๋ 'sql' ๋งค๊ฐ๋ณ์์ ๊ฐ์ฅ ์ ์ง์ ์ด๋ฃจ๋ ์ํฉ ์ค ํ๋์
๋๊น?
@sc0ttkclark ๋ง์ต๋๋ค . ์ฒ์์๋ ๊ทธ๋ฃน๋น์ ๊ฐ๋
์ ์๋ชป ์ดํดํ์ง๋ง ์ฌ์ ํ
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
์ด๋ฏธ์ง์ ํ์๋ ์ถ๋ ฅ๊ณผ ๊ฐ์ด ๋๋ฉ๋๋ค. ์๋ก ์ค์น๋ wordpress + pods ๋ฒ์ ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ค๊ณ ํ์ต๋๋ค. ๋ถํํ๋ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ์๋ํ๋์ง :์๋๋ค:
@kristonovo ์ ์ ํ๊ฒ ์ ๋ ฌ
์๋ก ์ค์น๋ ํ ์คํธ ์ค์ ๋ด @jimtrue : ์. ๋ด ์ค์ ํ๋ก์ ํธ: ์๋์. ์ฌ๊ธฐ์ ์ํ๋ ์ถ๋ ฅ์ ์ป์ผ๋ ค๋ฉด ์ฌ์ ํ ์ค์ ํฌ๋ ๊ด๊ณ ํ๋๋ฅผ ํ ๋นํด์ผ ํฉ๋๋ค. ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ฐ๋ฅผ ์ ์๋ ๋๋ฒ๊ทธ ๋จ๊ณ๊ฐ ์์ต๋๊น?
@kristonovo ์๋นํ ์ด์ํฉ๋๋ค. ์ฆ, ๋ค๋ฅธ ๊ฒ์ด ์ ๋ ฌ์ '๋ฐ์ ๋๋๊ณ ์๋ค'๋ ์๋ฏธ์
๋๋ค. @sc0ttkclark ์ด๋ค ์ ์์ด ์์ต๋๊น? URL์ ?pods_debug_sql_all=1
๋ฅผ ์ถ๊ฐํ์ฌ ์ค์๋ํ๋ ์ ๋ ฌ์ ์ดํด๋ณด๊ณ ํธ์ถ๋๋ SQL ์ฟผ๋ฆฌ๋ฅผ ํ์ธํ๊ณ ๋น๊ตํ ์ ์์ต๋๋ค.
๋ถ๋ฅ๋ฒ์ ์ํฅ์ ์ค ์ ์๋ ์ค์๋ํ๋ ๋ฒ์ ์์ ์คํ ์ค์ธ ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๊น?
@kristonovo ์คํฌ๋ฆฐ์ท์์ "festival.name"์ด ๋ฌด์์ธ๊ฐ์?
@sc0ttkclark 2014, 2015
'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title'
๊ณ ๋ คํ ์ ์์ต๋๋ค(2015๋
์ ์ํ๋ฉด 2014๋
).
๊ณง ๋๋ฒ๊ทธ URL๊ณผ CAST ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
@sc0ttkclark
array('orderby' => 'CAST(festivaljahr.name AS INT(4)) DESC, post_title', 'limit' => -1);
์์ฐํ๋ค
[You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`' at line 20]
SELECT DISTINCT `t`.* FROM `wp_table_posts` AS `t` LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON `rel_festival`.`object_id` = `t`.`ID` LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON `rel_tt_festival`.`taxonomy` = 'festival' AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id` LEFT JOIN `wp_table_terms` AS `festival` ON `festival`.`term_id` = `rel_tt_festival`.`term_id` WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) ) ORDER BY CAST(`festival`.`name` AS INT(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
์ด์ฉ๋ฉด์์ด INT(4)
๋์ ์ฌ์ฉํ DECIMAL(4,0)
@jimtrue
array('orderby' => 'festivaljahr.name, post_title', 'limit' => -1);
pods_debug_sql_all=1
์ ํจ๊ป
1
SELECT
DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`
LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`
LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`
LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`
WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )
ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
2
SELECT
DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`
LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`
LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`
LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`
WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )
ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
์ผ
`SELECT `ID`, `post_name`, `post_parent` FROM `wp_table_posts` WHERE `post_type` = '_pods_field' AND ( `post_name` IN ( 'festival', 'name' ) )`
4
SELECT
DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )
ORDER BY `t`.`name`, `t`.`term_id`
5
SELECT
DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )
ORDER BY `t`.`name`, `t`.`term_id`
6
SELECT
DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`
WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )
ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3
7
SELECT
DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`
WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )
ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3
@sc0ttkclark
DECIMAL(4,0)์ ๋ ์ด์ SQL ์ค๋ฅ๊ฐ ์์ง๋ง ์ถ์ ๊ฐ ์๋ ์ด๋ฒคํธ๋ณ๋ก ๋ค์ ์ฃผ๋ฌธ๋จ
๊ทธ ๋์ ํฌ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ด ๋นํ์ฑํ๋ฉ๋๋ค. ์ฌ์ ํ ๊ทธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค :(
Festival.name์ผ๋ก๋ง ํ ์คํธ:
$params = array('orderby' => 'festival.name DESC');
์ถ๋ ฅ
๋์
$params = array('orderby' => 'festival.name ASC');
์ถ๋ ฅ
์ถ๋ ฅ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค๊ณ ์์ ํ ํ์ ํฉ๋๊น? ์ฝํ ์ธ ๋ฅผ ๋์ดํ๋ ๋ฐ ์ฌ์ฉํ๋ PHP๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น?
ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ๋ฐ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ๋ด ์๋ชป์ด ์๋๊น ๊ฑฑ์ ์ด ๋ฉ๋๋ค.๋์:
<?php
/**
* Template Name: Events
*/
get_header();
?>
<div class="column-1-3">
<h1><a href="/events" target="_self">Events</a><br><br></h1>
<div class="event">
<?php
$params = array('orderby' => 'festival.name');
$events = pods('event')->find($params);
if ($events->data()) {
while ($events->fetch()) {
echo $events->display('festival.name') . ' - ' . $events->display('post_title') . '<br>';
}
}
?>
</div>
</div>
<?php get_sidebar( 'right' ); ?>
<?php get_footer(); ?>
... ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ด๋ฒคํธ ํฌ๋์ ์ค์ ์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๊ธฐ ์ํด Pod ๊ด๋ฆฌ ์์ญ์ ๋ก๊ทธ์ธํ ์ ์๋๋ก ๋ก๊ทธ์ธ์ ์ ๊ณตํ์๊ฒ ์ต๋๊น? Slack(http://pods.io/chat/) ๋๋ ๋ค์ ์์์ ํตํด ๋น๊ณต๊ฐ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค. https://pods.io/help/
์, ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค๋นํ ์ ์์ต๋๋ค. ๊ทธ๋๋ ์๊ฐ์ด ์ข ํ์ํฉ๋๋ค. ๊ทธ ๋์ ๋๋ ํ ๊ฐ์ง ๋ค๋ฅธ ๊ฒ์ ํ ์คํธํ์ต๋๋ค.
๋งค๊ฐ๋ณ์๋ ํญ์ ๋์ผํฉ๋๋ค.
$params = array('orderby' => 'festival.name DESC');
๋ค์ค ๋ถ๋ฅ ๊ด๊ณ๊ฐ orderby๋ฅผ ๋ฐฉํดํ ์ ์์ต๋๊น? ๋ด๊ฐ ์๋ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด๊ด๋ฉ๋๋ค. ๊ด๊ณ๋ฅผ ์ ๊ฑฐํ๋๋ผ๋.
์ด์ ๋ํ ํ์ ์กฐ์น๋ก Pod์ ๋ฌธ์ ๊ฐ ์๋๋ผ MySQL์ ๋ฌธ์ ์์ต๋๋ค.
์ด๋ค ์ด์ ๋ก๋ ์กฐ์ธ๋ ํ๋์ ๋ํด ORDER BY๋ฅผ ์ํํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ ฌ๋์ง ์์ต๋๋ค. 'where' => 'festival.name IS NOT NULL'
๋ฅผ ์ถ๊ฐํ๋ฉด ์ฌ๋ฐ๋ฅด๊ฒ ์ฃผ๋ฌธ๋๊ธฐ ์์ํ์ต๋๋ค.
MySQL ์ ๋ฌธ๊ฐ๋ ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ๋ ์ด์ ์ ํฅํ ์ด๋ฅผ ์ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํฉ๋๋ค.