原有代码:$favorites_query = DB::query("SELECT * FROM ".DB::table('favorites')." ORDER BY svupdatetime DESC LIMIT $start_limit, $perpage");
改进上方代码,如何不显示 svip 中额外相同内容的重复数据?

解决方案 »

  1.   

    id为1、2的svip重复,你要显示哪一条呢?
      

  2.   

    参考一,这是若有重复,显示最小id的那一条,"SELECT * FROM ".DB::table('favorites')." WHERE id IN (SELECT min(id) FROM ".DB::table('favorites')." GROUP BY svip) ORDER BY ……";
      

  3.   


    显示 ID 最大的那个,刚试用了你的代码, $favorites_query = DB::query("SELECT * FROM ".DB::table('favorites')." WHERE id IN (SELECT min(id) FROM ".DB::table('favorites')." GROUP BY svip) ORDER BY svupdatetime DESC LIMIT $start_limit, $perpage");出现错误提示:
    [Type] 查询语句安全威胁
    [Query] SELECT * FROM favorites WHERE id IN (SELECT min(id) FROM favorites GROUP BY svip) ORDER BY svupdatetime DESC LIMIT 0, 20
      

  4.   

    显示最大就用max这不是错误,,这可能是你的代码阻止子查询语句,,要么取消这种检测,要么你换个方式总不能阻止左连接吧,
      

  5.   

    select DISTINCT(`svip`) ......
      

  6.   

    group by svip 分组一下
      

  7.   

    $favorites_query = DB::query("SELECT DISTINCT(svip) FROM ".DB::table('favorites')." ORDER BY svupdatetime DESC LIMIT $start_limit, $perpage");
      

  8.   

    $favorites_query = DB::query("SELECT DISTINCT(svip),uid,svname FROM ".DB::table('favorites')." ORDER BY svupdatetime DESC LIMIT $start_limit, $perpage");需要的字段再后面追加即可 
      

  9.   


    奇怪,应该显示数据的地方直接显示空白了。使用下面代码能正常显示,但是怎样让它显示重复数据中最新的一条呢?$favorites_query = DB::query("SELECT * FROM ".DB::table('favorites')."  GROUP BY svip ORDER BY svupdatetime DESC LIMIT $start_limit, $perpage");
      

  10.   

    看到一个例子,但有点不理解:SELECT emp2.dept_id, 
           emp1.name, 
           emp1.gender, 
           emp2.max_salary
    FROM (
      SELECT dept_id,       
             Max(salary) as max_salary 
      FROM   employees 
      GROUP BY dept_id
    ) as emp2 JOIN employees as emp1 ON emp1.salary = emp2.max_salary
    GROUP BY dept_id;
      

  11.   

    这个就是amani11说的,in一般都可以改成join