本文整理汇总了PHP中Search::to_sql方法的典型用法代码示例。如果您正苦于以下问题:PHP Search::to_sql方法的具体用法?PHP Search::to_sql怎么用?PHP Search::to_sql使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Search
的用法示例。
在下文中一共展示了Search::to_sql方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: song_to_sql
/**
* song_to_sql
* Handles the generation of the SQL for song searches.
*/
private function song_to_sql()
{
$sql_logic_operator = $this->logic_operator;
$where = array();
$table = array();
$join = array();
$group = array();
$having = array();
$join['tag'] = array();
foreach ($this->rules as $rule) {
$type = $this->name_to_basetype($rule[0]);
$operator = array();
foreach ($this->basetypes[$type] as $op) {
if ($op['name'] == $rule[1]) {
$operator = $op;
break;
}
}
$input = $this->_mangle_data($rule[2], $type, $operator);
$sql_match_operator = $operator['sql'];
switch ($rule[0]) {
case 'anywhere':
$where[] = "(`artist`.`name` {$sql_match_operator} '{$input}' OR `album`.`name` {$sql_match_operator} '{$input}' OR `song_data`.`comment` {$sql_match_operator} '{$input}' OR `song_data`.`label` {$sql_match_operator} '{$input}' OR `song`.`file` {$sql_match_operator} '{$input}' OR `song`.`title` {$sql_match_operator} '{$input}')";
$join['album'] = true;
$join['artist'] = true;
$join['song_data'] = true;
break;
case 'tag':
$key = md5($input . $sql_match_operator);
$where[] = "`realtag_{$key}`.`match` > 0";
$join['tag'][$key] = "{$sql_match_operator} '{$input}'";
break;
case 'album_tag':
$key = md5($input . $sql_match_operator);
$where[] = "`realtag_{$key}`.`match` > 0";
$join['album_tag'][$key] = "{$sql_match_operator} '{$input}'";
$join['album'] = true;
break;
case 'title':
$where[] = "`song`.`title` {$sql_match_operator} '{$input}'";
break;
case 'album':
$where[] = "`album`.`name` {$sql_match_operator} '{$input}'";
$join['album'] = true;
break;
case 'artist':
$where[] = "`artist`.`name` {$sql_match_operator} '{$input}'";
$join['artist'] = true;
break;
case 'composer':
$where[] = "`song`.`composer` {$sql_match_operator} '{$input}'";
break;
case 'time':
$input = $input * 60;
$where[] = "`song`.`time` {$sql_match_operator} '{$input}'";
break;
case 'file':
$where[] = "`song`.`file` {$sql_match_operator} '{$input}'";
break;
case 'year':
$where[] = "`song`.`year` {$sql_match_operator} '{$input}'";
break;
case 'comment':
$where[] = "`song_data`.`comment` {$sql_match_operator} '{$input}'";
$join['song_data'] = true;
break;
case 'label':
$where[] = "`song_data`.`label` {$sql_match_operator} '{$input}'";
$join['song_data'] = true;
break;
case 'played':
$where[] = " `song`.`played` = '{$input}'";
break;
case 'bitrate':
$input = $input * 1000;
$where[] = "`song`.`bitrate` {$sql_match_operator} '{$input}'";
break;
case 'rating':
if ($this->type != "public") {
$where[] = "COALESCE(`rating`.`rating`,0) {$sql_match_operator} '{$input}'";
} else {
$group[] = "`song`.`id`";
$having[] = "ROUND(AVG(IFNULL(`rating`.`rating`,0))) {$sql_match_operator} '{$input}'";
}
$join['rating'] = true;
break;
case 'played_times':
$where[] = "`song`.`id` IN (SELECT `object_count`.`object_id` FROM `object_count` " . "WHERE `object_count`.`object_type` = 'song' AND `object_count`.`count_type` = 'stream' " . "GROUP BY `object_count`.`object_id` HAVING COUNT(*) {$sql_match_operator} '{$input}')";
break;
case 'catalog':
$where[] = "`song`.`catalog` {$sql_match_operator} '{$input}'";
break;
case 'playlist_name':
$join['playlist'] = true;
$join['playlist_data'] = true;
$where[] = "`playlist`.`name` {$sql_match_operator} '{$input}'";
//.........这里部分代码省略.........
示例2: advanced
/**
* advanced
* This processes the results of a post from a form and returns an
* array of song items that were returned from said randomness
*/
public static function advanced($type, $data)
{
/* Figure out our object limit */
$limit = intval($data['random']);
// Generate our matchlist
/* If they've passed -1 as limit then get everything */
$limit_sql = "";
if ($data['random'] == "-1") {
unset($data['random']);
} else {
$limit_sql = "LIMIT " . Dba::escape($limit);
}
$search_data = Search::clean_request($data);
$search_info = false;
if (count($search_data) > 1) {
$search = new Search(null, $type);
$search->parse_rules($search_data);
$search_info = $search->to_sql();
}
$sql = "";
switch ($type) {
case 'song':
$sql = "SELECT `song`.`id`, `size`, `time` " . "FROM `song` ";
if ($search_info) {
$sql .= $search_info['table_sql'];
}
if (AmpConfig::get('catalog_disable')) {
$sql .= " LEFT JOIN `catalog` ON `catalog`.`id` = `song`.`catalog`";
$sql .= " WHERE `catalog`.`enabled` = '1'";
}
if ($search_info) {
if (AmpConfig::get('catalog_disable')) {
$sql .= ' AND ' . $search_info['where_sql'];
} else {
$sql .= ' WHERE ' . $search_info['where_sql'];
}
}
break;
case 'album':
$sql = "SELECT `album`.`id`, SUM(`song`.`size`) AS `size`, SUM(`song`.`time`) AS `time` FROM `album` ";
if (!$search_info || !$search_info['join']['song']) {
$sql .= "LEFT JOIN `song` ON `song`.`album`=`album`.`id` ";
}
if ($search_info) {
$sql .= $search_info['table_sql'];
}
if (AmpConfig::get('catalog_disable')) {
$sql .= " LEFT JOIN `catalog` ON `catalog`.`id` = `song`.`catalog`";
$sql .= " WHERE `catalog`.`enabled` = '1'";
}
if ($search_info) {
if (AmpConfig::get('catalog_disable')) {
$sql .= ' AND ' . $search_info['where_sql'];
} else {
$sql .= ' WHERE ' . $search_info['where_sql'];
}
}
$sql .= ' GROUP BY `album`.`id`';
break;
case 'artist':
$sql = "SELECT `artist`.`id`, SUM(`song`.`size`) AS `size`, SUM(`song`.`time`) AS `time` FROM `artist` ";
if (!$search_info || !$search_info['join']['song']) {
$sql .= "LEFT JOIN `song` ON `song`.`artist`=`artist`.`id` ";
}
if ($search_info) {
$sql .= $search_info['table_sql'];
}
if (AmpConfig::get('catalog_disable')) {
$sql .= " LEFT JOIN `catalog` ON `catalog`.`id` = `song`.`catalog`";
$sql .= " WHERE `catalog`.`enabled` = '1'";
}
if ($search_info) {
if (AmpConfig::get('catalog_disable')) {
$sql .= ' AND ' . $search_info['where_sql'];
} else {
$sql .= ' WHERE ' . $search_info['where_sql'];
}
}
$sql .= ' GROUP BY `artist`.`id`';
break;
}
$sql .= " ORDER BY RAND() {$limit_sql}";
// Run the query generated above so we can while it
$db_results = Dba::read($sql);
$results = array();
$size_total = 0;
$fuzzy_size = 0;
$time_total = 0;
$fuzzy_time = 0;
while ($row = Dba::fetch_assoc($db_results)) {
// If size limit is specified
if ($data['size_limit']) {
// Convert
$new_size = $row['size'] / 1024 / 1024;
// Only fuzzy 100 times
//.........这里部分代码省略.........
示例3: song_to_sql
/**
* song_to_sql
* Handles the generation of the SQL for song searches.
*/
private function song_to_sql()
{
$sql_logic_operator = $this->logic_operator;
$where = array();
$table = array();
$join = array();
$join['tag'] = array();
foreach ($this->rules as $rule) {
$type = $this->name_to_basetype($rule[0]);
$operator = array();
foreach ($this->basetypes[$type] as $op) {
if ($op['name'] == $rule[1]) {
$operator = $op;
break;
}
}
$input = $this->_mangle_data($rule[2], $type, $operator);
$sql_match_operator = $operator['sql'];
switch ($rule[0]) {
case 'anywhere':
$where[] = "(`artist`.`name` {$sql_match_operator} '{$input}' OR `album`.`name` {$sql_match_operator} '{$input}' OR `song_data`.`comment` {$sql_match_operator} '{$input}' OR `song`.`file` {$sql_match_operator} '{$input}' OR `song`.`title` {$sql_match_operator} '{$input}')";
$join['album'] = true;
$join['artist'] = true;
$join['song_data'] = true;
break;
case 'tag':
$key = md5($input . $sql_match_operator);
$where[] = "`realtag_{$key}`.`match` > 0";
$join['tag'][$key] = "{$sql_match_operator} '{$input}'";
break;
case 'title':
$where[] = "`song`.`title` {$sql_match_operator} '{$input}'";
break;
case 'album':
$where[] = "`album`.`name` {$sql_match_operator} '{$input}'";
$join['album'] = true;
break;
case 'artist':
$where[] = "`artist`.`name` {$sql_match_operator} '{$input}'";
$join['artist'] = true;
break;
case 'time':
$input = $input * 60;
$where[] = "`song`.`time` {$sql_match_operator} '{$input}'";
break;
case 'file':
$where[] = "`song`.`file` {$sql_match_operator} '{$input}'";
break;
case 'year':
$where[] = "`song`.`year` {$sql_match_operator} '{$input}'";
break;
case 'comment':
$where[] = "`song_data`.`comment` {$sql_match_operator} '{$input}'";
$join['song_data'] = true;
break;
case 'played':
$where[] = " `song`.`played` = '{$input}'";
break;
case 'bitrate':
$input = $input * 1000;
$where[] = "`song`.`bitrate` {$sql_match_operator} '{$input}'";
break;
case 'rating':
$where[] = "COALESCE(`rating`.`rating`,0) {$sql_match_operator} '{$input}'";
$join['rating'] = true;
break;
case 'played_times':
$where[] = "`song`.`id` IN (SELECT `object_count`.`object_id` FROM `object_count` " . "WHERE `object_count`.`object_type` = 'song'" . "GROUP BY `object_count`.`object_id` HAVING COUNT(*) {$sql_match_operator} '{$input}')";
break;
case 'catalog':
$where[] = "`song`.`catalog` {$sql_match_operator} '{$input}'";
break;
case 'playlist_name':
$join['playlist'] = true;
$join['playlist_data'] = true;
$where[] = "`playlist`.`name` {$sql_match_operator} '{$input}'";
break;
case 'playlist':
$join['playlist_data'] = true;
$where[] = "`playlist_data`.`playlist` {$sql_match_operator} '{$input}'";
break;
case 'smartplaylist':
$subsearch = new Search('song', $input);
$subsql = $subsearch->to_sql();
$where[] = "{$sql_match_operator} (" . $subsql['where_sql'] . ")";
// HACK: array_merge would potentially lose tags, since it
// overwrites. Save our merged tag joins in a temp variable,
// even though that's ugly.
$tagjoin = array_merge($subsql['join']['tag'], $join['tag']);
$join = array_merge($subsql['join'], $join);
$join['tag'] = $tagjoin;
break;
case 'added':
$input = strtotime($input);
$where[] = "`song`.`addition_time` {$sql_match_operator} {$input}";
break;
//.........这里部分代码省略.........
示例4: array
set_time_limit(0);
$media_ids = array();
$name = "Unknown.zip";
switch ($_REQUEST['action']) {
case 'tmp_playlist':
$media_ids = $GLOBALS['user']->playlist->get_items();
$name = $GLOBALS['user']->username . ' - Playlist';
break;
case 'playlist':
$playlist = new Playlist($_REQUEST['id']);
$media_ids = $playlist->get_songs();
$name = $playlist->name;
break;
case 'smartplaylist':
$search = new Search('song', $_REQUEST['id']);
$sql = $search->to_sql();
$sql = $sql['base'] . ' ' . $sql['table_sql'] . ' WHERE ' . $sql['where_sql'];
$db_results = Dba::read($sql);
while ($row = Dba::fetch_assoc($db_results)) {
$media_ids[] = $row['id'];
}
$name = $search->name;
break;
case 'album':
foreach ($_REQUEST['id'] as $a) {
$album = new Album($a);
if (empty($name)) {
$name = $album->name;
}
$asongs = $album->get_songs();
foreach ($asongs as $song_id) {