🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #219834

Wolno dzialajacy skrypt

#219834
From: maYk
Date: Thu, 23 Jul 2009 19:35
104 lines
4662 bytes
Witajcie, pracuje nad systemem zarzadzania kontaktami w ktorym mamy 3
najwazniejsze tabele:

- lista firm
- lista kontaktow
- lista statusow

No wiec, wyglada to tak. Mamy sobie tabelke o nazwie "lista kontaktow"
ktorej struktura wyglada mniej wiecej tak:

ID, company name, first name, last name, address, city, state, zip,
phone, product_status, status

Pole "company name" odpowiada numerem nazwie firmy w tabelce "lista
firm" a pole product_status to lancuch cyfr odzielonych przecinkiem
ktore odpowiadaja statusom w tabelce "lista statusow".

Kiedy wchodzimy na strone, skrypt zaczyna zliczac wszystkie rekordy z
tabelki "lista kontaktow" i wrzuca wszysko w multidimensional array
$company[], $last_name[], $statuses[].

$sql = "SELECT * FROM `_cms_groups_data WHERE `status` = '3'";
		$result  = mysql_query($sql, $dbh1) or die ("Could not get
results2.". mysql_error());
		while ($wynik = mysql_fetch_array($result)) {
					$companies[$inc]['ID'] 				= $wynik['company'];
					$companies[$inc]['GROUP'] 			= $_SESSION['group'];
					$companies[$inc]['company_name']  	= pull_up_company_name
($_SESSION['group'], $wynik['company']);
					$inc++;
					$last_name[] = $wynik['last_name'];
					$statuses[]  = $wynik['product_status'];
                  }

Nastepnie, usuwamy wszystkie powielone rekordy w kazdej z tablic:

		if (isset($companies)){
			$companies = arrayUnique($companies);
			foreach($companies as $key => $value) {
				  if($value == "") {
					unset($companies[$key]);
				  }
			}
		  $companies = array_values($companies);
		  $companies = array_msort($companies, array('company_name'=>array
(SORT_ASC,SORT_REGULAR)));

		}
		if (isset($last_name)){
			$last_name = array_unique($last_name);
			//REMOVE EMPTY RECORDS
			foreach($last_name as $key => $value) {
				  if($value == "") {
					unset($last_name[$key]);
				  }
			}
		$last_name = array_unique($last_name);
		$last_name  = array_values($last_name);
		sort($last_name,SORT_STRING);
		//$last_name = array_msort($last_name, array('last_name'=>array
(SORT_ASC,SORT_REGULAR)));
		}

		if (isset($statuses)){
			$new_statuses = array();
			for ($a=0;$a<count($statuses);$a++){
				$new_statuses =	array_merge(explode(",",$statuses[$a]),
$new_statuses);
			}
			$new_statuses = array_values(array_unique($new_statuses));
			for ($a=0;$a<count($new_statuses);$a++){
				if ($new_statuses[$a] != ""){
					$list_statuses[$a]['ID'] 			= $new_statuses[$a];
					$list_statuses[$a]['status_name'] 	= $pull_up_product_status_info
[$new_statuses[$a]];
				}else {
					unset($new_statuses[$a]);
				}
			}
			if (isset($list_statuses))	{
				$list_statuses  = array_values($list_statuses);
				$list_statuses = array_msort($list_statuses, array
('status_name'=>array(SORT_ASC,SORT_REGULAR)));
			}
		}


A nastepnie tworzymy z kazdej ze zmiennych pola wyboru HTML:
 <select name=company>unikalna i posortowana lista firm</select>
<select name=last_name>unikalna i posortowana lista nazwisk</select>
<select name=status>unikalna i posortowana lista statusow</select>


Problem polega na tym ze wszystko to bardzo wolno dziala. Przy 1700
rekordow skrypt pojawia sie okolo 17 sekund. Zauwazylem ze kiedy usune
zawartosc kolumny product_status ktora najczesciej wyglada tak:
4,14,23,1,3,26 to czas wykonywania tego samego skryptu spada do 4
sekund. Bardzo prosze o porade, jak moge uczynic moj skrypt szybszym,
oraz jakich bledow unikac aby nie spotykac sie z takimi problemami w
przyszlosci.


Pozdrawiam
Michal
Technical Details
Message-ID: <73ced6b9-b6ea-42c8-beb7-d3af06008365@26g2000yqk.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!26g2000yqk.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!26g2000yqk.googlegroups.com!not-for-mail
From: maYk <m.gawrychowski@gmail.com>
Newsgroups: pl.comp.lang.php
Subject: Wolno dzialajacy skrypt
Date: Thu, 23 Jul 2009 12:35:39 -0700 (PDT)
Organization: http://groups.google.com
Lines: 104
Message-ID: <73ced6b9-b6ea-42c8-beb7-d3af06008365@26g2000yqk.googlegroups.com>
NNTP-Posting-Host: 75.127.181.202
Mime-Version: 1.0
X-Trace: posting.google.com 1248377739 14438 127.0.0.1 (23 Jul 2009 19:35:39 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Thu, 23 Jul 2009 19:35:39 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: 26g2000yqk.googlegroups.com; posting-host=75.127.181.202;  posting-account=VUaMuQoAAADTDiCQs1_Lzd2gS1Olr4rF
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1)  Gecko/20090715 Firefox/3.5.1 (.NET CLR 3.5.30729),gzip(gfe),gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit