• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Optymalizacja kodu, zmniejszenie liczby zapytań do bazy

Object Storage Arubacloud
0 głosów
462 wizyt
pytanie zadane 11 listopada 2018 w PHP przez Śmieszek_;3 Użytkownik (780 p.)
edycja 11 listopada 2018 przez Śmieszek_;3

Hej

piszę CMS i dodałem opcję do usunięcia tematu, wszystko hula, ale wiem, że ten kod jest baardzoo zły i piszę z prośbą o jakieś rady, wskazówki.

$decreaseCategoryuArtNum = $polaczenie->query("UPDATE categories SET artnum=artnum-1 WHERE catid='$fid'"); // zmniejszamy ilość tematów w danym dziale o jeden

				$getComNum = $polaczenie->query("SELECT cid FROM comments WHERE artid='$aid'"); // pobieramy posty, które zostały napisane w tym temacie
				$getComNum = $getComNum->num_rows; // ilosc postów w temacie
				$decreaseCategoryComNum = $polaczenie->query("UPDATE categories SET comnum=comnum-'$getComNum' WHERE catid='$fid'"); // zmniejszamy ilość postów w danym dziale


				$decreaseUserArtNum = $polaczenie->query("UPDATE users SET articlenum=articlenum-1 WHERE uid='$uid'"); // zmniejszamy ilość tematów użytkownika o jeden


                               //sprawdzamy którzy użytkownicy napisali posta w tym temacie i ile tych postów napisali. Przy każdym wywołaniu pętli zmniejszamy ilość postów autora danego posta o jeden
				$decreaseComNum = $polaczenie->query("SELECT uid FROM comments WHERE artid='$aid'"); 
				while($decreaseComNumRow = $decreaseComNum->fetch_assoc()) {
					$comuid = $decreaseComNumRow['uid'];
 					$comNums = $polaczenie->query("SELECT cid FROM comments WHERE uid='$comuid'");
 					$comNumsRows = $comNums->num_rows;
 					$decreaseUserComNum = $polaczenie->query("UPDATE users SET comnum=comnum-1 WHERE uid='$comuid'");
                    $deleteArticle = $polaczenie->query("DELETE FROM articles WHERE artid='$aid'");
 					header("Location: categories.php");
				}

 

 

Wiem, że nie jest to obiektowo, ani w MVC ani nic, ale dopiero się uczę i chcę to najpierw napisać proceduralnie, a dopiero potem w OOP.

 

I inne pytanko, czy należy używać throw catch do zapytań, czy może być zapytanie bez tego żeby nie wydłużać kodu?

komentarz 11 listopada 2018 przez niezalogowany

nie polecam ci PHP to jest chory język np porównując liczbę z stringiem dostaniesz wartość True na twoim miejscu uczyłbym się Django lub ASP.NET np w PHP musisz martwić się o wstrzykiwanie SQL w django nie musisz nic robić ponieważ django samo zamienia wszystkie kropki przecinki itd itd na te takie śmieszne numerki których nazwę zapomniałem cheeky(chodzi mi tutaj o np takie coś &copy) druga rzecz to to że w ASP.Net i Django masz więcej ofert pracy 2 a nawet 3 razy więcej trzeci powód to siatka przekierowań w PHP musisz martwić się czy ktoś nie wpisze ci w  adresie np /jestemzalogowany.php ,a w django i ASP.Net "no problem" full auto wink 

Już widzę te django i ASP.Net to są frameworki a PHP to język ,a ja mam tutaj też argumencik laugh korzystałem już z symfony lavarel i zend a żaden nie był tak prosty i tak fajny jak django i asp.net :)

kilka linków do porównania ofert pracy:

ASP.NET::::::http://prntscr.com/lh4aew

Django:::::::http://prntscr.com/lh4an3 oraz http://prntscr.com/lh4avz

i ten najgorszy wybór PHP(głównie podtrzymywanie starych projektów):::::::http://prntscr.com/lh4b6i

komentarz 11 listopada 2018 przez kubaapk Nałogowiec (44,270 p.)
To czy coś było fajne czy niefajne to żaden argument. Pochwal się co większego napisałeś w php, a co w django. ;-)
komentarz 11 listopada 2018 przez Śmieszek_;3 Użytkownik (780 p.)
PHPem już zacząłem się jakiś czas interesować, teraz stwierdziłem, że pora coś zrobić z życiem i zaczynam się go bardziej uczyć i za jakiś czas szukać pracy jako junior. Wybrałem ten język bo jakoś dobrze się w nim czuje.

Dzięki za odpowiedź, chętnie bym sobie poczytał merytoryczna wymianę zdań na ten temat, ale jeżeli będzie taki offtop to zostanie ten temat zamknięty, więc jeżeli jest możliwość to prosiłbym moderatora o wydzielenie tych komentarzy do nowego tematu.
komentarz 11 listopada 2018 przez Chess Szeryf (76,710 p.)

Jeśli usuwasz temat z bazy danych, to dlaczego nigdzie nie robisz DELETE FROM `tbl_name` ...?

komentarz 11 listopada 2018 przez Śmieszek_;3 Użytkownik (780 p.)
edycja 11 listopada 2018 przez Śmieszek_;3
Nie ma tego, bo póki co tylko testowałem odejmowanie komentarzy, artykułów, a gdyby dodał tą linię to musiałbym za każdym razem po teście pisać nowy artykuł i komentarze ;)

Więc na czas testów tej linii nie umieściłem, a później zapomniałem ją dodać :P

 

//Dodane, dzięki
komentarz 12 listopada 2018 przez niezalogowany

@kubaapk, pisać pisałem ,ale nie chce mi się teraz męczyć z szukanie hostow cheeky

1 odpowiedź

+1 głos
odpowiedź 12 listopada 2018 przez Chess Szeryf (76,710 p.)
wybrane 12 listopada 2018 przez Śmieszek_;3
 
Najlepsza
<body style="background:darkolivegreen;">
<?php
$db_conn = new mysqli('localhost','root','pass_to_db','forumpasjainformatyki');

function delete_article($db_conn, $id_article) {
	
	$del_record = $db_conn->query('delete from articles where id='.$id_article);
	
	if(!$del_record) {
		printf("Errorcode: %d\n", $db_conn->errno);
	} else {
		if($db_conn->affected_rows===0) {
			echo 'Not have neither article in DB.';
		} else {
			echo 'Deleted row.';
		}	
	}
}

delete_article($db_conn, 20);

function get_quantity_articles($db_conn, $id_user)  {

	$get_article = $db_conn->query('select distinct count(*) as art from articles where id_user=' . $id_user);
	$all_articles = $db_conn->query('select distinct count(*) as art from articles');
	
	if(!$get_article || !$all_articles) {
		printf("Errorcode: %d\n", $db_conn->errno);
	} else {
	
		$temp1 = 'Quantity articles users about id=' . $id_user . ' is ';
		$temp2 = $get_article->fetch_assoc()['art'] . '.';
		$temp3 = "All articles is: ";
		$temp4 = $all_articles->fetch_assoc()['art'] . '.';
		return $temp1 . $temp2 . "\n" . $temp3 . $temp4;
	}
}
echo '<br />';
echo get_quantity_articles($db_conn, 9);

$db_conn->close();

?>

Ogólnie obsługę błędów itd. na klasach i nie tylko mógłbyś sobie napisać sam. To zostawiam już Tobie (wydzielanie i fragmentowanie kawałków kodu do innej części odpowiadającej za logikę innej za widok, itp.).

Zamiast dwóch zmiennych z dwoma zapytaniami możesz napisać tylko jedną zmienną z jednym zapytaniem w ten sposób:

$get_quantity_articles = $db_conn->query('select (select count(distinct id) from articles) as q_all, (select count(distinct id) from articles where id_user=4) as q_single');

I później (zamiast $temp2 i $temp4):

$temp2 = $get_quantity_articles->fetch_assoc()['q_single'] . '.';
$temp4 = $get_quantity_articles->fetch_assoc()['q_all'] . '.';

Podobne pytania

0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 26 kwietnia 2018 w PHP przez sc4rface Dyskutant (7,710 p.)
0 głosów
1 odpowiedź 172 wizyt
pytanie zadane 13 stycznia 2020 w SQL, bazy danych przez reaktywny Nałogowiec (40,990 p.)
0 głosów
0 odpowiedzi 161 wizyt
pytanie zadane 15 czerwca 2018 w C# przez HDRGXS Początkujący (470 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...