libarea/modules/search/App/Models/SearchModel.php

140 lines
4.7 KiB
PHP

<?php
namespace Modules\Search\App\Models;
use DB;
class SearchModel extends \Hleb\Scheme\App\Models\MainModel
{
public static function getSearch($page, $limit, $query)
{
$start = ($page - 1) * $limit;
$sql = "SELECT DISTINCT
post_id,
post_title as title,
post_slug,
post_feature,
post_translation,
post_draft,
post_date,
post_published,
post_user_id,
post_votes,
post_answers_count,
post_comments_count,
post_content as content,
post_content_img,
post_thumb_img,
post_merged_id,
post_closed,
post_tl,
post_lo,
post_top,
post_url_domain,
post_is_deleted,
post_hits_count,
rel.*,
id, login, avatar
FROM facets_posts_relation
LEFT JOIN posts ON relation_post_id = post_id
LEFT JOIN ( SELECT
relation_post_id,
GROUP_CONCAT(facet_type, '@', facet_slug, '@', facet_title SEPARATOR '@') AS facet_list
FROM facets
LEFT JOIN facets_posts_relation on facet_id = relation_facet_id
GROUP BY relation_post_id
) AS rel ON rel.relation_post_id = post_id
LEFT JOIN users ON id = post_user_id
WHERE post_is_deleted = 0 and post_draft = 0 and post_tl = 0
AND MATCH(post_title, post_content) AGAINST (:qa)
LIMIT $start, $limit";
return DB::run($sql, ['qa' => $query])->fetchall();
}
public static function getSearchCount($query)
{
$sql = "SELECT DISTINCT
post_id
FROM posts
WHERE post_is_deleted = 0 and post_draft = 0 and post_tl = 0
AND MATCH(post_title, post_content) AGAINST (:qa)";
return DB::run($sql, ['qa' => "%" . $query . "%"])->rowCount();
}
// For Sphinx
public static function getSearchPostServer($query, $limit)
{
$sql = "SELECT
id AS post_id,
post_slug,
post_votes,
post_hits_count,
facet_list,
login,
avatar,
SNIPPET(post_title, :qa) AS title,
SNIPPET(post_content, :qa) AS content
FROM postind WHERE MATCH(:qa) LIMIT $limit";
return DB::run($sql, ['qa' => $query], 'mysql.sphinx-search')->fetchall();
}
public static function getSearchTags($query, $type, $limit)
{
if ($type == 'server') {
$sql = "SELECT
facet_slug,
facet_count,
facet_title,
facet_type,
facet_img
FROM tagind WHERE facet_type = 'topic' AND MATCH(:qa) LIMIT $limit";
return DB::run($sql, ['qa' => $query], 'mysql.sphinx-search')->fetchall();
}
$sql = "SELECT
facet_slug,
facet_count,
facet_title,
facet_img
FROM facets WHERE facet_type = 'topic' AND facet_title LIKE :qa1 OR facet_slug LIKE :qa2
LIMIT $limit";
return DB::run($sql, ['qa1' => "%" . $query . "%", 'qa2' => "%" . $query . "%"])->fetchAll();
}
public static function setSearchLogs($params)
{
$sql = "INSERT INTO search_logs(request,
action_type,
add_ip,
user_id,
count_results)
VALUES(:request,
:action_type,
:add_ip,
:user_id,
:count_results)";
DB::run($sql, $params);
}
public static function getSearchLogs($limit)
{
$sql = "SELECT
request,
action_type,
add_date,
add_ip,
user_id,
count_results
FROM search_logs ORDER BY id DESC LIMIT $limit";
return DB::run($sql)->fetchAll();
}
}