mysql更有效的查询方式

时间:2016-08-17 16:06:28

标签: mysql

下面的

完成了工作,但我觉得我违反了编程规则。

 function extractMiddle(str) {

        var position;
        var length;

        if(str.length % 2 == 1) {
            position = str.length / 2;
            length = 1;
        } else {
            position = str.length / 2 - 1;
            length = 2;
        }

        return str.substring(position, position + length)
    }

    console.log(extractMiddle("handbananna"));

有没有更好的方法或正确的方法来完成这项工作?

3 个答案:

答案 0 :(得分:1)

一种选择是为每个reg_date组找到最大server,其中server可以从UNION查询中的5个值中选择一个,然后选择表格中每个server组的完整记录。

SELECT t1.*
FROM serverTable t1
INNER JOIN
(
    SELECT server,
           MAX(reg_date) AS reg_date
    FROM serverTable
    WHERE server in ('proc1@server1', 'proc2@server1', 'proc3@server1', 'proc4@server1', 'proc5@server1')
    GROUP BY server
) t2
    ON t1.server = t2.server AND
       t1.reg_date = t2.reg_date

答案 1 :(得分:0)

使用UNION ALL而不是UNION。通过使用UNION,数据库不必要地查找不存在的重复项。所有UNIONed查询都包含一个WHERE子句,如“server like(some unique value)”。 server不能等于其中一个以上,因此您不会有任何重复过滤。

另外,请使用=代替like。当你想要进行通配符搜索时,会使用LIKE

答案 2 :(得分:0)

这样的事情应该这样做:

select
  serverTable.col1,
  serverTable.col2,
  serverTable.col3,
  max(reg_date)
from
  serverTable
where
  server in ('proc1@server1','proc2@server1','proc3@server1','proc4@server1','proc5@server1')
group by
  serverTable.col1,
  serverTable.col2,
  serverTable.col3
order by
  server, reg_date;