Programming/PHP2014. 9. 4. 15:43


Anonymous functions - http://php.net/manual/ro/functions.anonymous.php


있다는 것만 알지.. 사용하지 않았다.. 

그런데 구글링 중 괜찮은 활용 방법을 찾아서!! 왠지 jquery 하는듯한 느낌은 뭐지...;;

 - 특정 배열값 파싱하거나 재구성할때 for문 안돌리고 array_map 이용할때 괜찮은듯함.

예) http://stackoverflow.com/questions/13435747/how-can-i-remove-the-file-extension-from-each-string-in-a-php-array


  1. <?php
  2. # your array
  3. $slike = array('1.jpg','253455.jpg','32.jpg','477.jpg');
  4. # if you have PHP >= 5.3, I'd use this
  5. $slike = array_map(function($e){
  6. return pathinfo($e, PATHINFO_FILENAME);
  7. }, $slike);
  8. # if you have PHP <= 5.2, use this
  9. $slike = array_map('pathinfo', $slike, array_fill(
  10. 0, count($slike), PATHINFO_FILENAME
  11. ));
  12. # dump
  13. print_r($slike);
  14. /*print
  15. Array
  16. (
  17. [0] => 1
  18. [1] => 253455
  19. [2] => 32
  20. [3] => 477
  21. )
  22. */
  23. ?>


※ 단 PHP 5.3 이상부터 가능함!

Posted by 시니^^
DB/NoSQL/Mysql2014. 9. 4. 11:23


※  DISTINCT 와 GROUP BY 의 경우 처리방식은 비슷하지만 사용하는 성향에 따라서 조금씩 이용하는 곳이 다르다.

     그리고 가장 큰 차이는 GROUP BY 의 경우 정렬이 일어나는 것이다.

     아래의 예시를 보면 file sort가 일어나는 것을 볼 수 있다.


CREATE TABLE `asd` (
  `idx` int(11) NOT NULL AUTO_INCREMENT,
  `id` varchar(20) NOT NULL DEFAULT '',
  `data` varchar(20) NOT NULL DEFAULT '',
  PRIMARY KEY (`idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into asd (id,data)values('a',100);
insert into asd (id,data)values('a',100);
insert into asd (id,data)values('c',100);
insert into asd (id,data)values('d',100);
insert into asd (id,data)values('c',100);
insert into asd (id,data)values('c',100);
insert into asd (id,data)values('d',100);
insert into asd (id,data)values('d',100);


※ id 컬럼에 index가 걸려있다면 filesort가 나지 않지만 걸려 있지 않다면 아래와 같이 filesort가 일어난다.

   해당 쿼리가 비번하게 일어난다면 filesort의 경우 성능에 큰 차이를 보일 수 있다. 

   그래서 정렬이 필요하지 않을 경우에는 order by null를 입력해서 filesort를 막을 수있다.


mysql> explain select * from asd group by id;
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                           |
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
|  1 | SIMPLE      | asd   | ALL  | NULL          | NULL | NULL    | NULL |    8 | Using temporary; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
1 row in set (0.00 sec)
mysql> explain select * from asd group by id order by null;
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra           |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
|  1 | SIMPLE      | asd   | ALL  | NULL          | NULL | NULL    | NULL |    8 | Using temporary |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
1 row in set (0.00 sec)


※ 해당 내용은 아래 블로그를 참조 하였으며 자세한 내용은 아래 블로그에서 설명을 볼 수 있습니다.

DISTINCT 와 GROUP BY의 차이 - http://intomysql.blogspot.kr/2011/01/distinct-group-by.html

GROUP BY의 Filesort 작업 제거 - http://intomysql.blogspot.kr/2010/12/group-by-filesort.html



Posted by 시니^^