uery into SQL for a WHERE clause.
*
* @since 4.1.0
*
* @param array $query Date query clause.
* @param array $parent_query Parent query of the current date query.
* @return string[] {
* Array containing JOIN and WHERE SQL clauses to append to the main query.
*
* @type string $join SQL fragment to append to the main JOIN clause.
* @type string $where SQL fragment to append to the main WHERE clause.
* }
*/
protected function get_sql_for_clause( $query, $parent_query ) {
global $wpdb;
// The sub-parts of a $where part.
$where_parts = array();
$column = ( ! empty( $query['column'] ) ) ? esc_sql( $query['column'] ) : $this->column;
$column = $this->validate_column( $column );
$compare = $this->get_compare( $query );
$inclusive = ! empty( $query['inclusive'] );
// Assign greater- and less-than values.
$lt = '<';
$gt = '>';
if ( $inclusive ) {
$lt .= '=';
$gt .= '=';
}
// Range queries.
if ( ! empty( $query['after'] ) ) {
$where_parts[] = $wpdb->prepare( "$column $gt %s", $this->build_mysql_datetime( $query['after'], ! $inclusive ) );
}
if ( ! empty( $query['before'] ) ) {
$where_parts[] = $wpdb->prepare( "$column $lt %s", $this->build_mysql_datetime( $query['before'], $inclusive ) );
}
// Specific value queries.
$date_units = array(
'YEAR' => array( 'year' ),
'MONTH' => array( 'month', 'monthnum' ),
'_wp_mysql_week' => array( 'week', 'w' ),
'DAYOFYEAR' => array( 'dayofyear' ),
'DAYOFMONTH' => array( 'day' ),
'DAYOFWEEK' => array( 'dayofweek' ),
'WEEKDAY' => array( 'dayofweek_iso' ),
);
// Check of the possible date units and add them to the query.
foreach ( $date_units as $sql_part => $query_parts ) {
foreach ( $query_parts as $query_part ) {
if ( isset( $query[ $query_part ] ) ) {
$value = $this->build_value( $compare, $query[ $query_part ] );
if ( $value ) {
switch ( $sql_part ) {
case '_wp_mysql_week':
$where_parts[] = _wp_mysql_week( $column ) . " $compare $value";
break;
case 'WEEKDAY':
$where_parts[] = "$sql_part( $column ) + 1 $compare $value";
break;
default:
$where_parts[] = "$sql_part( $column ) $compare $value";
}
break;
}
}
}
}
if ( isset( $query['hour'] ) || isset( $query['minute'] ) || isset( $query['second'] ) ) {
// Avoid notices.
foreach ( array( 'hour', 'minute', 'second' ) as $unit ) {
if ( ! isset( $query[ $unit ] ) ) {
$query[ $unit ] = null;
}
}
$time_query = $this->build_time_query( $column, $compare, $query['hour'], $query['minute'], $query['second'] );
if ( $time_query ) {
$where_parts[] = $time_query;
}
}
/*
* Return an array of 'join' and 'where' for compatibility
* with other query classes.
*/
return array(
'where' => $where_parts,
'join' => array(),
);
}
/**
* Builds and validates a value string based on the comparison operator.
*
* @since 3.7.0
*
* @param string $compare The compare operator to use.
* @param string|array $value The value.
* @return string|false|int The value to be used in SQL or false on error.
*/
public function build_value( $compare, $value ) {
if ( ! isset( $value ) ) {
return false;
}
switch ( $compare ) {
case 'IN':
case 'NOT IN':
$value = (array) $value;
// Remove non-numeric values.
$value = array_filter( $value, 'is_numeric' );
if ( empty( $value ) ) {
return false;
}
return '(' . implode( ',', array_map( 'intval', $value ) ) . ')';
case 'BETWEEN':
case 'NOT BETWEEN':
if ( ! is_array( $value ) || 2 !== count( $value ) ) {
$value = array( $value, $value );
} else {
$value = array_values( $value );
}
// If either value is non-numeric, bail.
foreach ( $value as $v ) {
if ( ! is_numeric( $v ) ) {
return false;
}
}
$value = array_map( 'intval', $value );
return $value[0] . ' AND ' . $value[1];
default:
if ( ! is_numeric( $value ) ) {
return false;
}
return (int) $value;
}
}
/**
* Builds a MySQL format date/time based on some query parameters.
*
* You can pass an array of values (year, month, etc.) with missing parameter values being defaulted to
* either the maximum or minimum values (controlled by the $default_to parameter). Alternatively you can
* pass a string that will be passed to date_create().
*
* @since 3.7.0
*
* @param string|array $datetime An array of parameters or a strotime() string
* @param bool $default_to_max Whether to round up incomplete dates. Supported by values
* of $datetime that are arrays, or string values that are a
* subset of MySQL date format ('Y', 'Y-m', 'Y-m-d', 'Y-m-d H:i').
* Default: false.
* @return string|false A MySQL format date/time or false on failure
*/
public function build_mysql_datetime( $datetime, $default_to_max = false ) {
if ( ! is_array( $datetime ) ) {
/*
* Try to parse some common date formats, so we can detect
* the level of precision and support the 'inclusive' parameter.
*/
if ( preg_match( '/^(\d{4})$/', $datetime, $matches ) ) {
// Y
$datetime = array(
'year' => (int) $matches[1],
);
} elseif ( preg_match( '/^(\d{4})\-(\d{2})$/', $datetime, $matches ) ) {
// Y-m
$datetime = array(
'year' => (int) $matches[1],
'month' => (int) $matches[2],
);
} elseif ( preg_match( '/^(\d{4})\-(\d{2})\-(\d{2})$/', $datetime, $matches ) ) {
// Y-m-d
$datetime = array(
'year' => (int) $matches[1],
'month' => (int) $matches[2],
'day' => (int) $matches[3],
);
} elseif ( preg_match( '/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2})$/', $datetime, $matches ) ) {
// Y-m-d H:i
$datetime = array(
'year' => (int) $matches[1],
'month' => (int) $matches[2],
'day' => (int) $matches[3],
'hour' => (int) $matches[4],
'minute' => (int) $matches[5],
);
}
// If no match is found, we don't support default_to_max.
if ( ! is_array( $datetime ) ) {
$wp_timezone = wp_timezone();
// Assume local timezone if not provided.
$dt = date_create( $datetime, $wp_timezone );
if ( false === $dt ) {
return gmdate( 'Y-m-d H:i:s', false );
}
return $dt->setTimezone( $wp_timezone )->format( 'Y-m-d H:i:s' );
}
}
$datetime = array_map( 'absint', $datetime );
if ( ! isset( $datetime['year'] ) ) {
$datetime['year'] = current_time( 'Y' );
}
if ( ! isset( $datetime['month'] ) ) {
$datetime['month'] = ( $default_to_max ) ? 12 : 1;
}
if ( ! isset( $datetime['day'] ) ) {
$datetime['day'] = ( $default_to_max ) ? (int) gmdate( 't', mktime( 0, 0, 0, $datetime['month'], 1, $datetime['year'] ) ) : 1;
}
if ( ! isset( $datetime['hour'] ) ) {
$datetime['hour'] = ( $default_to_max ) ? 23 : 0;
}
if ( ! isset( $datetime['minute'] ) ) {
$datetime['minute'] = ( $default_to_max ) ? 59 : 0;
}
if ( ! isset( $datetime['second'] ) ) {
$datetime['second'] = ( $default_to_max ) ? 59 : 0;
}
return sprintf( '%04d-%02d-%02d %02d:%02d:%02d', $datetime['year'], $datetime['month'], $datetime['day'], $datetime['hour'], $datetime['minute'], $datetime['second'] );
}
/**
* Builds a query string for comparing time values (hour, minute, second).
*
* If just hour, minute, or second is set than a normal comparison will be done.
* However if multiple values are passed, a pseudo-decimal time will be created
* in order to be able to accurately compare against.
*
* @since 3.7.0
*
* @param string $column The column to query against. Needs to be pre-validated!
* @param string $compare The comparison operator. Needs to be pre-validated!
* @param int|null $hour Optional. An hour value (0-23).
* @param int|null $minute Optional. A minute value (0-59).
* @param int|null $second Optional. A second value (0-59).
* @return string|false A query part or false on failure.
*/
public function build_time_query( $column, $compare, $hour = null, $minute = null, $second = null ) {
global $wpdb;
// Have to have at least one.
if ( ! isset( $hour ) && ! isset( $minute ) && ! isset( $second ) ) {
return false;
}
// Complex combined queries aren't supported for multi-value queries.
if ( in_array( $compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ), true ) ) {
$return = array();
$value = $this->build_value( $compare, $hour );
if ( false !== $value ) {
$return[] = "HOUR( $column ) $compare $value";
}
$value = $this->build_value( $compare, $minute );
if ( false !== $value ) {
$return[] = "MINUTE( $column ) $compare $value";
}
$value = $this->build_value( $compare, $second );
if ( false !== $value ) {
$return[] = "SECOND( $column ) $compare $value";
}
return implode( ' AND ', $return );
}
// Cases where just one unit is set.
if ( isset( $hour ) && ! isset( $minute ) && ! isset( $second ) ) {
$value = $this->build_value( $compare, $hour );
if ( false !== $value ) {
return "HOUR( $column ) $compare $value";
}
} elseif ( ! isset( $hour ) && isset( $minute ) && ! isset( $second ) ) {
$value = $this->build_value( $compare, $minute );
if ( false !== $value ) {
return "MINUTE( $column ) $compare $value";
}
} elseif ( ! isset( $hour ) && ! isset( $minute ) && isset( $second ) ) {
$value = $this->build_value( $compare, $second );
if ( false !== $value ) {
return "SECOND( $column ) $compare $value";
}
}
// Single units were already handled. Since hour & second isn't allowed, minute must to be set.
if ( ! isset( $minute ) ) {
return false;
}
$format = '';
$time = '';
// Hour.
if ( null !== $hour ) {
$format .= '%H.';
$time .= sprintf( '%02d', $hour ) . '.';
} else {
$format .= '0.';
$time .= '0.';
}
// Minute.
$format .= '%i';
$time .= sprintf( '%02d', $minute );
if ( isset( $second ) ) {
$format .= '%s';
$time .= sprintf( '%02d', $second );
}
return $wpdb->prepare( "DATE_FORMAT( $column, %s ) $compare %f", $format, $time );
}
}
宠物 - 经验大全 - 第 27 页
对于喜欢在家中养鱼的人来说,鱼缸水起白雾可不是什么好事,今天给大家介绍如何解决鱼缸水起白雾这一问题。 工具/原料 钱 耐心 方法/步骤 1 鱼缸水起白雾可能就是鱼缸的问题,那么这个时候我们可以将原来的鱼缸替换掉,换成新的鱼缸。 2 鱼缸水起白雾有可能就是因为水中的氧气不够了,这个时候我们可以买增氧器,增加水中的氧气。 3 鱼缸水起白雾有可能和没有经常换水有关,这个时候,我们就要每隔十几天去换一次水,保证鱼生活的水质是干净的。 END 方法/步骤2 1 鱼缸水起白雾有可能是因为各种各样的鱼混杂在一起,导致水起白雾,这…
下面为大家分享一下 大小锦鲤的选购方法经验。希望对大家有所帮助哦 步骤/方法 1 仔鱼选购法 仔鱼是只指2cm长的小鱼。重要的是要购买优秀种鲤所生产的仔鱼,最好是看了亲鱼再买。通常买仔鱼的人大都是想从中获得好的锦鲤,不过当你买了一大批数千尾的仔鱼后,日后的挑选工作是非常重要的,千万不可放任不管。第一次筛选淘汰出白无地、赤无地、畸形、变形等。第二次则淘汰花纹不良者。总而言之,饲养仔鱼不是只顾喂食饲料就可以了,还需要耐心筛选,才能出现好的品种。 2 稚鱼选购法 5~10cm大的鱼我们称之为稚鱼。选购稚鱼大多…
换新环境后七彩是容易发生紧迫拒食的情况,要想办法消除鱼的紧张感,让它熟悉适应环境。 工具/原料 床单、报纸、虾 方法/步骤 1 一般新进缸水温会调的高一点,30度到32度,一周后再调回28、9度的。 2 静养期间不要换水了,封缸,用床单或报纸把缸围起来,封2天。每天早上可以喂点点德彩的颗粒,或者冰冻丰年虾少量就行,保证过滤 3 扔点黑壳进去试试,虾过个几天少了就说明开口了,可能只是胆子小,吃的时候你没看到。 END 注意事项 喜欢的话投上一票吧 经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您…
饲养金鱼不管是园林、鱼场或个体专业户对其建立金鱼饲养场地、水源、电源都必须有规划,即使金鱼爱好者在庭园内建造几只小鱼池,也要因地制宜的设计。因为饲养金鱼的场地和水源的选择规划可直接影响到金鱼的生长发育和今后的科学技术管理,事先务必全面考察和规划。 饲养地点选择 1 养鱼场地最好选择阳光充足、通风良好的地方,特别要选择上午6时到中午12时之间均能晒到太阳,而且通风条件好的郊外、庭园和加固的房顶及阳台上。 2 鱼场必须靠近水源、电源之处 如果河、湖、江的水质没有污染情况的,为了降低养鱼成本,也可因地制宜利用天然…
浮游矶钓调漂 方法/步骤 1 我们的浮游矶钓应该也是指包容以上各种玩法的活动,只要有不太庞大的浮标、家俬不太笨重、在矶岩(包括防波堤)海岸下竿、钓组能够自由漂晃(打沈底就不算啦)等等,原则上都可以归类为浮游矶钓。 2 那么根据这种原则定义出来的垂钓方式,应该包含以下重点。 3 因为使用浮标,故钓棚深度有重大意义,但此一深度却跟下竿地点海底的实际深度不尽相同,而是需要取决于钓手主观意念和鱼群吃饵泳层的相互搭配。(打沈底则几乎不必考虑此点,反正都是直接搞到海底的) 4 为让钓组漂晃自然,钓者必须充分掌握水流,…
随着生活水平的提高,人们对艺术鉴赏有了进一步的发展。古时候高地位的人喜欢把玩盆景园艺等,现代社会由于空间、时间等条件的限制,我们追求生活品味的物品也随之变化,茶、花、宠物、古玩、鱼、画等成了休闲怡情的首选,其中鱼缸成了最具吸引力的艺术品。在家中摆放这么一造景缸,随时随地可以欣赏到方寸间自然的景色,也给生活带来不少乐趣。我们可以直接买水族店中做好造景的成品鱼缸景致,也可以DIY!自己做出来完全属于自己的那一番精致,成景后所带来的成就感是买成品永远也体会不到的。那么问题就来了,养鱼我们到底需要买什么?造景需要准备什…
狗狗护食是一种不好的行为。在幼犬时期如果对这种行为不加以纠正,今后会发展成为护玩具、护领地等等,最终导致攻击人类,是很危险的。很多人主张用“打”来改掉阿拉斯加护食的坏习惯,对此我极不赞同。因为狗护食是一种本能,是与生俱来的。在它护食的时候打它,会适得其反,只会更激起它保护食物的欲望。在野外,动物为了争夺一点食物不惜付出生命的代价。食物对阿拉斯加来讲也是非常珍贵,需要它捍卫的东西。 步骤/方法 1 经常放手上喂食。摊开手掌,好吃的食物,可以是狗粮,放在手心上喂给阿拉斯加。这种喂食方式很安全,狗狗会舔食,不会咬到手。狗…
九寨沟黄龙被誉为人间天堂,他们是上天的恩赐,九寨之水以其千变万化的色彩,勾勒出九寨的神韵。加之雪山、森林、湖泊,飞瀑……动静结合的美景,九寨沟旅游风景区形成自己独有的姿态迎接着南来北往的游客。但是去九寨沟黄龙之前一篇旅游攻略少不了,下面是聚途旅游网为大家准备的九寨沟黄龙旅游攻略。 工具/原料 <P><STRONG>九寨沟黄龙旅游攻略导航</STRONG></P> <P></P> <P><STRONG>1.</STR…
墨兰属于兰属植物,花开的很是大气且颜色亮丽,既优雅有壮丽,很是受花友们的喜爱。但容易发生烂根的情况,烂根的救治方法如下。 工具/原料 换土 剪刀 杀菌剂 方法/步骤 1 如果家里养的兰发生了烂根的情况,首先呢我们就要将其烂掉的根和枯叶都给剪掉,烂根旁边的杂物也都要除掉,避免溃烂的部分扩散,使兰花的病情加深。 2 将兰消毒,泡上两个小时DUOJUNLING候再洗干净,放到阳光下一段时间。然后换上新的植料,可以用水苔、树皮块、蛭石、腐叶土、泥炭土来混合制成。 3 气根性植物,在其生长过程中所需水分来源,一小部分有空气中…
所有狗都需要定期剪趾甲,若趾甲太长,不但会滑倒,也容易藏细菌。趾甲太长还会刺进脚壁内,造成脚趾发炎或趾甲断裂,致走路疼痛。因此要定期替宠物剪趾甲,尤其室内狗,由于少出外散步,趾甲较易长。 在替宠物剪趾甲前您要准备:狗专用剪趾甲器、消毒药水、药绵、止血剂。 具体操作方法如下: 1 1.把狗放在大腿上,轻轻抚它的头令它们安静。 2 2.剪趾甲器与趾甲的角度要呈45度。 3 3.若不慎流血,便要立即用药棉加上止血剂止血。 4 4.不要剪得太近肉根(呈深色不透明),否则会流血。 5 5.拿起其中…
一些小型犬如博美泰迪,在很小的时候就会定点进食和大小便,中大型犬定点定时的控制会比较差一点,我们一般可以在三四个月逐渐训练狗狗的一些行为习惯。 经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。 作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。 展开阅读全部
很多家长面对高考考生的饮食都操碎了心,不知道给孩子吃些什么食物好。下面是小编为大家整理的高考前食谱提高记忆力,希望对大家有所帮助。 高考前食谱提高记忆力 1 橘子 橘子含有大量维生素A、B1和C,属典型的碱性食物,可以消除大量酸性食物对神经系统造成的危害。考试期间适量常吃些橘子,能使人精力充沛。此外,柠檬、广柑、柚子等也有类似功效,可代替橘子。 2 英泰含片 英泰含片提高记忆力,英泰含片是一款改善记忆力的保健品。英泰含片作为神经突触之间的“邮递员”,可以促进神经生长因子、神经营养因子以及胆碱能神经分化因子D…