简体   繁体   English

将7个查询与内部联接合并为1个查询,mysql

[英]7 query with inner join into 1 query, mysql

i have a question, how do i make totally 7 query into 1 query? 我有一个问题,我如何将总共7个查询变成1个查询? to make the db query lesser? 使数据库查询更少? i have 1 table contain all of it, but the suggest is a "separator", each suggest i have to load 33 rows and order by dateline, i have think about use any inner join ... etc, but i think that is not a way? 我有1个表包含所有内容,但是suggest是一个“分隔符”,每个建议我必须加载33行并按日期线排序,我已经考虑过使用任何内部联接...等等,但是我认为不是一条路? correct me if i'm wrong. 如果我错了纠正我。 Would Appreciate for help!THanks!! 会很感激的!谢谢!

This is the mysql query 1 这是mysql查询1

$query = DB::query("SELECT t.*, d.did AS dingid, d.id AS dingpid, f.id AS bookmark, f.uid AS buid 
        FROM ".DB::table('comeing_tao')." AS t 
        LEFT JOIN ".DB::table('comeing_tao_ding')." AS d ON t.id = d.id AND d.uid = ".$_G['uid']." 
        LEFT JOIN ".DB::table('comeing_tao_fans')." AS f ON t.id = f.id AND f.uid = ".$_G['uid']." 
        WHERE t.suggest = 0 AND t.state = 1 ORDER BY dateline DESC LIMIT 33");

This is the mysql query 2 这是mysql查询2

$query = DB::query("SELECT t.*, d.did AS dingid, d.id AS dingpid, f.id AS bookmark, f.uid AS buid 
            FROM ".DB::table('comeing_tao')." AS t 
            LEFT JOIN ".DB::table('comeing_tao_ding')." AS d ON t.id = d.id AND d.uid = ".$_G['uid']." 
            LEFT JOIN ".DB::table('comeing_tao_fans')." AS f ON t.id = f.id AND f.uid = ".$_G['uid']." 
            WHERE t.suggest = 1 AND t.state = 1 ORDER BY dateline DESC LIMIT 33");

This is the mysql query 3 这是mysql查询3

$query = DB::query("SELECT t.*, d.did AS dingid, d.id AS dingpid, f.id AS bookmark, f.uid AS buid 
        FROM ".DB::table('comeing_tao')." AS t 
        LEFT JOIN ".DB::table('comeing_tao_ding')." AS d ON t.id = d.id AND d.uid = ".$_G['uid']." 
        LEFT JOIN ".DB::table('comeing_tao_fans')." AS f ON t.id = f.id AND f.uid = ".$_G['uid']." 
        WHERE t.suggest = 2 AND t.state = 1 ORDER BY dateline DESC LIMIT 33");

This is the mysql query 3 这是mysql查询3

$query = DB::query("SELECT t.*, d.did AS dingid, d.id AS dingpid, f.id AS bookmark, f.uid AS buid 
        FROM ".DB::table('comeing_tao')." AS t 
        LEFT JOIN ".DB::table('comeing_tao_ding')." AS d ON t.id = d.id AND d.uid = ".$_G['uid']." 
        LEFT JOIN ".DB::table('comeing_tao_fans')." AS f ON t.id = f.id AND f.uid = ".$_G['uid']." 
        WHERE t.suggest = 3 AND t.state = 1 ORDER BY dateline DESC LIMIT 33");

This is the mysql query 4 这是mysql查询4

$query = DB::query("SELECT t.*, d.did AS dingid, d.id AS dingpid, f.id AS bookmark, f.uid AS buid 
        FROM ".DB::table('comeing_tao')." AS t 
        LEFT JOIN ".DB::table('comeing_tao_ding')." AS d ON t.id = d.id AND d.uid = ".$_G['uid']." 
        LEFT JOIN ".DB::table('comeing_tao_fans')." AS f ON t.id = f.id AND f.uid = ".$_G['uid']." 
        WHERE t.suggest = 4 AND t.state = 1 ORDER BY dateline DESC LIMIT 33");

and so on... i skip the following 3 query cos is totally same except the t.suggest = 5, t.suggest = 6, t.suggest = 7 依此类推...我跳过以下3个查询cos完全相同,除了t.suggest = 5,t.suggest = 6,t.suggest = 7

the goal is all the query in one, then play around with the array. 目标是将所有查询合而为一,然后遍历数组。

you can use OR 你可以使用OR

(t.suggest=3 OR t.suggest=4 OR ...) AND ...

if you want max 33 records from each suggest, try UNION 如果每个建议最多要33条记录,请尝试UNION

(SELECT ...) UNION (SELECT ...) UNION (SELECT ...) ...

TRY in clause 条款中的TRY

SELECT 
    t.*, d.did AS dingid, d.id AS dingpid, f.id AS bookmark, f.uid AS buid 
FROM 
    ".DB::table('comeing_tao')." AS t 
LEFT JOIN ".DB::table('comeing_tao_ding')." AS d ON t.id = d.id AND d.uid = 
     ".$_G['uid']." 
LEFT JOIN ".DB::table('comeing_tao_fans')." AS f ON t.id = f.id AND f.uid = 
     ".$_G['uid']." 
WHERE 
      t.suggest IN(0,1,2,3,4,5,6,7) 
AND 
      t.state = 1 
ORDER BY 
      dateline DESC 

but Limit will not give 33 records for each but 33 for whole return 但是,Limit不会为每个记录提供33条记录,而是为整个收益记录提供33条记录

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM