7查询与内部联接为1查询,mysql


7 query with inner join into 1 query, mysql

我有一个问题,如何将7个查询变成1个查询?减少数据库查询?我有一个表包含所有这些,但suggest是一个"分隔符",每个表都建议我必须加载33行并按日期线排序,我已经考虑过使用任何内部联接。。。等等,但我认为这不是一种方式?如果我错了,请纠正我。非常感谢您的帮助!谢谢

这是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");

这是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");

这是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");

这是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");

这是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");

等等…我跳过下面的3个查询,因为除了t.sugg=5,t.sugg=6,t.Sugg=7 之外,其他查询完全相同

目标是将所有查询放在一个位置,然后使用数组。

您可以使用OR

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

如果您希望每个建议最多33条记录,请尝试UNION

(SELECT ...) UNION (SELECT ...) UNION (SELECT ...) ...
子句中的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 

但Limit不会为每个提供33条记录,而是为整个返回提供33条。