tp5 フレームワークを使用して SQL ステートメントを作成する
*
* 2021-09-03 10:30:52
0
3
1171

tp を使用して次の SQL ステートメントを記述するにはどうすればよいですか?

rreeee

*
*

全員に返信(2)
*

プロジェクト内のコード

model('MaterialLike')->alias('like_material')
                ->join('materials materials' , $materialsAlias.'id = '.$likeMaterailsAlias. 'material_id')
                ->where($map)
                ->where(function ($query) use ($where_map){                    $query->where($where_map);
                })->whereOr(function ($query) use ($where_or_map){                    $query->where($where_or_map);
                })
                ->field($field)
                ->order($order)
                ->page($page,$limit)
                ->select();

出力されたSQL文は

SELECT
    `materials`.`id`,
    `materials`.`uid`,
    `materials`.`title`,
    `materials`.`type`,
    `materials`.`tag`,
    `materials`.`description`,
    `materials`.`content`,
    `materials`.`photo_list`,
    `materials`.`video_list`,
    `materials`.`view`,
    `materials`.`likes`,
    `materials`.`share`,
    `materials`.`comment`,
    `materials`.`customer`,
    `materials`.`create_time`,
    `materials`.`is_top`,
    `materials`.`status` 
FROM
    `ap_material_like` `like_material`
    INNER JOIN `ap_materials` `materials` ON `materials`.`id` = `like_material`.`material_id` 
WHERE
    `materials`.`seller_id` = 2 
    AND `materials`.`status` = 1 
    AND `materials`.`display` = 1 
    AND 
       (
            `materials`.`m_category_id` IN ( 10001, 10005, 10008 ) 
            AND ( ( `materials`.`tag` LIKE '%胖%' ) OR ( `materials`.`content` LIKE '%胖%' ) ) 
            AND `like_material`.`uid` = '196893' 
            AND `like_material`.`typeid` = 3 
            AND `like_material`.`status` = 1 
            ) 
        OR (
            `materials`.`m_category_id` IN ( 10011, 10012, 10013, 10014, 10015 ) 
            AND ( ( `materials`.`title` LIKE '%胖%' ) OR ( `materials`.`description` LIKE '%胖%' ) OR ( `materials`.`tag` LIKE '%胖%' ) ) 
            AND `like_material`.`uid` = '196893' 
            AND `like_material`.`typeid` = 3 
            AND `like_material`.`status` = 1 
        ) 
ORDER BY
    `like_material`.`create_time` DESC 
    LIMIT 0,    20

実際に必要なものは

SELECT
    `materials`.`id`,
    `materials`.`uid`,
    `materials`.`title`,
    `materials`.`type`,
    `materials`.`tag`,
    `materials`.`description`,
    `materials`.`content`,
    `materials`.`photo_list`,
    `materials`.`video_list`,
    `materials`.`view`,
    `materials`.`likes`,
    `materials`.`share`,
    `materials`.`comment`,
    `materials`.`customer`,
    `materials`.`create_time`,
    `materials`.`is_top`,
    `materials`.`status` 
FROM
    `ap_material_like` `like_material`
    INNER JOIN `ap_materials` `materials` ON `materials`.`id` = `like_material`.`material_id` 
WHERE
    `materials`.`seller_id` = 2 
    AND `materials`.`status` = 1 
    AND `materials`.`display` = 1 
    AND (  {括号开头}
   (
        `materials`.`m_category_id` IN ( 10001, 10016, 10017 ) 
        AND ( ( `materials`.`tag` LIKE '%胖%' ) OR ( `materials`.`content` LIKE '%胖%' ) ) 
        AND `like_material`.`uid` = '196893' 
        AND `like_material`.`typeid` = 3 
        AND `like_material`.`status` = 1 
    ) 
    OR (
        `materials`.`m_category_id` IN ( 10020, 10021, 10022, 10023, 10024 ) 
        AND ( ( `materials`.`title` LIKE '%胖%' ) OR ( `materials`.`description` LIKE '%胖%' ) OR ( `materials`.`tag` LIKE '%胖%' ) ) 
        AND `like_material`.`uid` = '196893' 
        AND `like_material`.`typeid` = 3 
        AND `like_material`.`status` = 1 
    ) 
    ){括号结束}
ORDER BY
    `like_material`.`create_time` DESC 
    LIMIT 0,    20

そしてキーワードはこのままです

$keyword = trim($keyword);
if($keyword !== '') {
    $keywords = explode(' ', $keyword);
    //把空字符串的元素筛选掉
    $keywords = array_filter($keywords, function ($i) {
        return $i != '';
    });
    foreach ($keywords as $key => $val) {
        $keyword_where[] = array('like', "%{$val}%");
    }
    $keyword_where[] = 'or';
}

いいねを押す +0
小李大人

$sql = 'あなたの SQL';

$結果 = Db::query($sql);

いいねを押す +0
  • 返事 ありがとうございます。でも、ネイティブ バージョンを使用した私のコードは少し複雑で、あまり使いやすいものではありません。ここに簡単な例を書いただけです。プロジェクトではクロージャー クエリを使用しました。現時点では、この方法が最善ではありません。
    * 著者 2021-09-03 17:48:20
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート