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

Usuwnie rekordów SQL

Object Storage Arubacloud
0 głosów
234 wizyt
pytanie zadane 12 lutego 2019 w SQL, bazy danych przez zerakot Obywatel (1,870 p.)
edycja 12 lutego 2019 przez zerakot
Witam,

Mam pytanie - jak zrobić, aby usuwać rekord w tabeli za każdym razem, kiedy pięć kolumn ma tę samą wartość?
komentarz 12 lutego 2019 przez DarthMazut Bywalec (2,990 p.)
Hej :)
poczytaj o wyzwalaczach (ang. triggers) - myślę że to jest to o co pytasz.
komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
Poczytam, dam odpowiedź czy to to :)
komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)

@DarthMazut,  A jakaś łatwiejsza metoda istnieje?

komentarz 12 lutego 2019 przez DarthMazut Bywalec (2,990 p.)

Możliwe, ale nie przychodzi mi nic innego do głowy; wyzwalacze nie są trudne. Jeśli nie jest to rozwiązanie, które potrzebujesz natychmiast to może warto byłoby je poznać? Masz od razu przykład do przećwiczenia.smiley

komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
No to mam nowy cel. Dziękuję za pomoc :)
komentarz 12 lutego 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)
A ja chciałbym poznać otoczkę tego co robisz. Masz to połączone gdzieś z PHP bądź innym językiem? Jest jakiś moment który powoduje aktualizację tych wartości (np. zapisanie czegoś je zmienia i wtedy jest szansa, że wszystkie mogą mieć taką samą wartość)? Chodzi o tę samą wartość w 5 kolumnach tego samego jednego rekordu?

Z tego bardzo ogólnego opisu ciężko mi coś doradzić. Prawdopodobnie triggery na bazie danych faktycznie by pasowały. Ale zakładam że nie tylko. Może np. jest jakiś formularz modyfikujący daną wartość i po zapisaniu można wykonać kolejne zapytanie sprawdzające czy w tym momencie pozostałe są takie same?
komentarz 12 lutego 2019 przez wiktoz Mądrala (7,040 p.)
edycja 12 lutego 2019 przez wiktoz

@zerakot, może spróbuj ze zdarzeniami (events) - jeden z triggerów (wg mnie jeden z najłatwiejszych)

komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)

Cały kod php/html: (glowna.php)

<a href="logout.php">Wyloguj</a>
	
	<center><div id="container">	
		<div id="panel">
			<div id="wiadomosc1"> </div>
			<div id="wiadomosc2"> </div>
			<div id="wiadomosc3"> </div>
			<div id="wiadomosc4"></div>
			<div id="wiadomosc5"> </div>
		</div>
	
		<div id="tekst">
		<form action="" method="post">
			<input type="text" name="tekst" placeholder="Wiadomość: " autocomplete="off"/>
			<input type="text" name="do" placeholder="Odbiorca: " autocomplete="off"/>
			<input type="submit" value="Wyślij" action="" />
		</form>	
		</div>	
	</div></center>
	
	<?php
	if(isset($_POST['tekst']))
	{
		$tekst = $_POST['tekst'];
		$do = $_POST['do'];	
		$od = $_SESSION['login'];
		
		if(isset($tekst))
		{
		$connect = mysqli_connect('localhost', 'root', '', 'www');
		$zapytanie = 'insert into wiadomosci value("'.$od.'", "'.$do.'", "'.$tekst.'")';
		$wynik = mysqli_query($connect, $zapytanie);
		header('location: glowna.php');
		}
	}
	
	$sprawdz = 'SELECT * FROM wiadomosci WHERE od =="'.$od.'", do =="'.$do.'", tekst == "'.$tekst.'")';
	$ilosc = mysqli_fetch_row($sprawdz);
	echo $ilosc;
	
	
	?>

Kod, który zamienia zmienne z post na sesyjne: (session.php)

<?php
	session_start();
	
	if(isset($_POST['login']) && isset($_POST['password']))
	{
	$_SESSION['login'] = $_POST['login'];
	$_SESSION['password'] = $_POST['password'];
	header('location: login.php');
	}

?>

Jak pewnie łatwo zauważyć jest to kod mojego kolejnego ćwiczenia czyli prostego komunikatora, ale jako, że chciałbym jak najwięcej "pierdół" do niego dodać to chcę aby po wysłaniu wiadomości do np.: Tomka ( ja-->Tomek) i zapisaniu jej w bazie, nie zaśmiecało bazy, więc usuwało wszystkie wiadomości poza pięcioma ostatnimi.

Mam jeszcze skrypt logowania i rejestracji, ale uważam, że nie potrzebny jest tu.

komentarz 12 lutego 2019 przez wiktoz Mądrala (7,040 p.)
Przy insertowaniu tego do bazy możesz sprawdzać czy liczba rekordów jest większa od 5 i usuwać te, które są najstarsze. Tylko musisz zrobić jakiś identyfikator rekordów, po których sprawdzisz jakie są najstarsze. Może to być data lub id. Na większą skalę bardziej optymalne będzie użycie wyżej wspomnianych triggerów.

Pozdro
komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
A czy mógłbym poprosić o jakiś najlepiej polski poradnik/kurs do tego?
1
komentarz 12 lutego 2019 przez Tomek Sochacki Ekspert (227,510 p.)

i zapisaniu jej w bazie, nie zaśmiecało bazy, więc usuwało wszystkie wiadomości poza pięcioma ostatnimi.

ale od tego właśnie są bazy, aby trzymać w nich dużo danych, historię itp. :) Wiele początkujących osób obawia się o wydajność, miejsce itp. ale prawda jest taka, że baza, która ma te kilka czy kilkanaście tysięcy rekordów to raczej zalicza się do mikrobaz... O faktycznie dużych bazach i problemach wydajnościowych można mówić gdy mamy kilkanaście czy kilkadziesiąt tysięcy akcji na sekundę i wchodzimy w tematy BigData... także w takich małych projektach w ogóle nie przejmuj się objętością bazy :)

Co więcej, często w bazach nie usuwa się rekordów tylko robi tzw. soft delete, czyli np. oznaczenie flagą, że rekord traktujemy jako usunięty, ale nadal go w bazie trzymamy. Pamiętaj, że dzisiaj informacja jest najcenniejsza. Nawet przy dużych bazach miejsce, pamięć, dodatkowe instancje itp. zawsze możesz dokupić, ale straconych danych możesz już czasami nie odzyskać :)

komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
Na taką odpowiedź właśnie czekałem :). To jeden problem rozwiązany, ale jak mogę zrobić, aby porównywało datę wpisaną do kolumny np,: data? Datę wygenerowałem w PHP, po czym wysłałem do kolumny data, ale nie wiem jak napisać kod, który znajduje najstarszą.
komentarz 12 lutego 2019 przez Tomek Sochacki Ekspert (227,510 p.)
To już powinieneś zrobić w zapytaniu na bazie. Jeśli rekordów nie ma wiele to tak najprościej to chyba będzie pobrać odpowiednie rekordy, posortować je po dacie od najstarszej do najwcześniejszej i pobrać tylko te, których data jest najstarsza, czyli jeden albo N pierwszych rekordów.
komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
edycja 12 lutego 2019 przez zerakot
A  jak zrobić, aby wyświetlało tylko 5 z największym id?
komentarz 12 lutego 2019 przez Tomek Sochacki Ekspert (227,510 p.)
np. ORDER BY, tu masz wszystko dokładnie opisane: https://dev.mysql.com/doc/refman/8.0/en/order-by-optimization.html
komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
No właśnie sobie przypomniałem o ORDER BY, ale jak zrobić, aby wyświetlało tylko 5 z największym id?
komentarz 12 lutego 2019 przez Tomek Sochacki Ekspert (227,510 p.)
no to dodaj LIMIT 5... ehh Ty w ogóle wszedłeś na dokumentację mysql Kolego :)? LIMIT: https://dev.mysql.com/doc/refman/5.5/en/limit-optimization.html
komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
HEHE ja to noob jestem XD. Ale dzięki za pomoc, nie zamykam tematu, bo na pewno będę jeszcze miał jakieś pytania do SQL, bo to nie jest moja mocna strona
komentarz 12 lutego 2019 przez Tomek Sochacki Ekspert (227,510 p.)

bo to nie jest moja mocna strona

no to tym bardziej pierwsze kroki powinieneś kierować do dokumentacji :)

komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
No to będę miał co robić w wolne dni.
komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
Ale mam jedno pytanie, ponieważ jestem dość młody to nie znam na nie odpowiedzi: Dlaczego skoro jesteście wykształconymi programistami nie zrobicie czegoś podobnego do Facebooka na czym moglibyście zarabiać? Przecież umiecie.
komentarz 12 lutego 2019 przez Tomek Sochacki Ekspert (227,510 p.)
hehe, zrobienie FB od strony programistycznej dla jednej osoby... z całą architekturą mikroserwisów itd.? Życia by Ci nie starczyło, nie mówiąc już o czasie na nadzorowanie tego, fixy, nowe ficzery, administrację itp. itd.

Nie mówiąc też o kosztach wejścia w takie coś :)

Nie lepiej spokojnie pracować sobie jako programista na etacie czy jako freelancer? Może nie są to te same pieniądze co dochody dobrze prosperującej firmy, ale czasem nie kasa jest priorytetem, ale też czas na życie :) Mam wielu znajomych którzy zrobiliby wszystko dla każdej podwyżki, i w sumie akurat nie mówię tu o programistach tylko bardziej o innych branżach ale co z tej kasy jak nie masz potem czasu na jej wydawanie? Ja tam wole bardziej spokojne życie i czas na odpoczynek i czas dla dzieci :)
komentarz 12 lutego 2019 przez zerakot Obywatel (1,870 p.)
Rozumiem,

Dziękuję za poświęcony czas.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 316 wizyt
pytanie zadane 15 lutego 2019 w SQL, bazy danych przez zerakot Obywatel (1,870 p.)
0 głosów
1 odpowiedź 239 wizyt
0 głosów
0 odpowiedzi 143 wizyt
pytanie zadane 11 marca 2023 w SQL, bazy danych przez qax Dyskutant (8,060 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 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!

...