2014-07-24 3 views
0
<body style="color:#000000; font-family: Arial, Helvetica, sans-serif; background-color: #FFCC99; "> 
<?php 
// Create connection 
$con=mysqli_connect("X","X","X","X"); 
$temp='x'; 

// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$result = mysqli_query($con,"SELECT value FROM list ORDER BY id DESC"); 
while($row = mysqli_fetch_array($result)) { 
    if($row['value'] !== $temp) 
    { 
     echo $row['value'] . "<br>"; 
     $temp=$row['value']; 
    } 
} 

mysqli_close($con); 
?> 
<body> 

출력입니다.동일하지 않은 중복 문자열 필터링

[24.07.2014](22:19:11): NAVI BESS cu ip 93.78.10.222:27005 trimis catre 89.33.242.116:27015 
[24.07.2014](22:18:45): |TGBR| C4RTM4M cu ip 201.83.208.254:27005 trimis catre 89.33.242.100:27015 
[24.07.2014](22:18:44): |TGBR| C4RTM4M cu ip 201.83.208.254:27005 trimis catre 89.33.242.103:27015 
[24.07.2014](22:18:34): |TGBR| C4RTM4M cu ip 201.83.208.254:27005 trimis catre 89.33.242.116:27015 
[24.07.2014](22:18:22): czar cu ip 62.72.184.155:27005 trimis catre 89.33.242.100:27015 
[24.07.2014](22:17:58): AdeLyn*FcRmA cu ip 109.97.251.181:27005 trimis catre 89.33.242.103:27015 
[24.07.2014](22:17:43): AdeLyn*FcRmA cu ip 109.97.251.181:27005 trimis catre 89.33.242.116:27015 
[24.07.2014](22:16:59): |TGBR| C4RTM4M cu ip 201.83.208.254:27005 trimis catre 89.33.242.100:27015 
[24.07.2014](22:16:04): |TGBR| C4RTM4M cu ip 201.83.208.254:27005 trimis catre 89.33.242.103:27015 
[24.07.2014](22:15:56): |TGBR| C4RTM4M cu ip 201.83.208.254:27005 trimis catre 89.33.242.116:27015 
[24.07.2014](22:15:44): |TGBR| C4RTM4M cu ip 201.83.208.254:27005 trimis catre 89.33.242.100:27015 
[24.07.2014](22:11:48): petike888 cu ip 62.77.206.205:52014 trimis catre 89.33.242.103:27015 

시간이 다르기 때문에 분명히 나의 대략적인 방법이 작동하지 않습니다. SQL 구조를 변경하기에는 너무 늦었습니다. 그래서 문자열을 검사하고 날짜를 무시할 수있는 방법이 있습니까?

나는 일반적인 코딩 지식에서 나오는 매우 기본적인 PHP 지식을 가지고 있습니다. 마지막으로 시작한 문자열의 각 셀을 비교하고 마지막 것을 건너 뛸 수 있다고 생각합니다.하지만 어디에서 if 문을 시작합니까? 데이터의 최대 길이는 200입니까? 문자열의 현재 길이를 얻기 위해 어떤 종류의 함수가 있습니까? 이로 인해 수십만 줄의 거대한로드 시간과 사용량이 발생합니까?

편집 : 또한, 나는 완전히 고유 한 문자열을받지 않으 내가 좋겠 정말에 대해 별도의 행을 추가 날짜

을 하루에 한 번이 라인 중 하나 보여, 그래서도 분석 할 수 있다면 같은 시간, 날짜 및 문자열이 최후의 수단이됩니다.

+0

regex를 사용하여 날짜를 제거하고 비교할 수 있습니다. 또는 문자열을':'로 쪼개고 첫번째 발생을 제거하고 문자열을 다시 만듭니다. –

+0

당신은'group by substr (value, 1, 10)'과 같은 것을 시도 할 수 있습니다. 특히 효율적이지는 않을 것이지만 날짜 별 그룹을 제공 할 것입니다. –

+1

1 열에 큰 글자가 있으면 뭔가 잘못 됐습니다. 특히 뭔가 로그로 보입니다. 사용자 이름에는 ip/port 1을, 날짜에는 2 개의 열이 있어야하며 그 다음에 쉽게 검색 할 수 있습니다. – Prix

답변

0

SQL 쿼리를 변경하기에는 너무 늦은 이유는 무엇입니까?

타임 스탬프가 표준 길이 인 경우 (일부만 해당) 부분 문자열 만 수행하십시오.

SQL 레벨에서 수행하면 일반적으로 RDBMS에 대한보다 저렴한 조작 인 고유 한 작업을 수행 할 수 있습니다.

Select Distinct Substring(value, 25) As value 
FROM list 
ORDER BY id DESC 
+0

더 이상 아무것도 인쇄하지 않으며 편집 된 내용에 회신해도 표준 길이입니다. 적어도 8000 년 동안 사용됩니다 –

+0

len (값) -25가 아닐까요?) 나는 생각했다.) 아마도 23 대신에 25. – xQbert

+0

길이가 전혀없이 시도해보십시오. – Cheruvian

관련 문제