Suma rekordów nie zgadza się z sumą COUNT bazy danych

UPDATE 2
Już wiem co jest nie tak. Żadne błędne zapytanie, ale nie zauważyłem, że brak jest 14 wiersza, a jak wezmę select count(*) from xlbmi, to wychodzi 34. Ehhh co za…

Czyli tak jak wcześniej @molexor pisał. Pomyliłeś unikalny identyfikator rekordu (wiersza) z ilością rekordów w tabeli. ID rekordu może zgadzać się z całkowitą ilością rekordów, ale tylko na początku. Po jakimś czasie pracy bazy danych, wiersze są kasowane i możesz mieć łącznie dwa wiersze z identyfikatorami 1897 i 1898. :slight_smile:

Co ciekawe, SQL Server od wersji 2008 R2 po restarcie silnika bazy danych potrafił zwiększyć licznik ID o np. 1000 :slight_smile: więc mogliśmy mieć id kolejno 1,2,3, restart, 1004, 1005, 1006 itd.

ha! zgadłem :wink:
image

a… czepie się jeszcze:

CREATE TABLE `xlbmi` (
  `id` int(30) NOT NULL,
  `username` varchar(100) NOT NULL,
  `wiek` int(10) NOT NULL,
  `wzrost` varchar(40) NOT NULL,
  `waga` varchar(40) NOT NULL,
  `talia` varchar(40) NOT NULL,
  `biodra` varchar(40) NOT NULL,
  `user_ip` varchar(100) NOT NULL,
  `data` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Nie miesza się pracy zawodowej z życiem prywatnym, wódki z piwem, pizzy z ananasem, wódki z pastą do zębów( bo ch%% smakuje) i angielskiego z polskim.

No i jeszcze

Czemu varchary? :slight_smile:

Co zgadłeś? Pokazałeś tylko składnię tworzenia tabeli.

Jak już krytykujesz, to napisz dlaczego.

A czemu nie? Ja tylko tak dla testów zrobiłem.

Nie w mojej tabeli.

Chciałem tylko zaznaczyć, że liczenie na ciągłość i kolejność klucza głównego będącego inkrementowalnym intem może doprowadzić do sporych problemów. To, że „u Ciebie” coś się nie dzieje, nie znaczy, że jak sobie to odpalisz na serwerze, dalej będzie działać tak samo :slight_smile: to taka drobna podpowiedź od człowieka który trochę już w tym siedzi :slight_smile:

Zdziwiłem się, bo dane są mocno liczbowe. No i potencjalnie w przyszłości na tych danych można zrobić nowe zapytania, zrobić statystyki itd.

Odpowiem za kolegę :slight_smile: Mieszając języki tworzysz potworki składniowe, trzymanie się jednego języka jest uznawane za dobrą praktykę programowania. To potem naprawdę procentuje, bo kod jest czytelniejszy, można też w razie potrzeby pokazać go komuś kto nie zna języka polskiego i on zrozumie (jeśli całość będzie po angielsku, a do tego zazwyczaj się dąży, ponieważ instrukcje sterujące również są w języku angielskim)

Obwijasz w bawełnę! O co Ci konkretnie chodzi? Nie robi się Count po kluczu głównym? Jak tak, to napisz, a nie piszesz lub kolega wierszyki. Powiedz mi, od kiedy nie wolno dawać w nazwach kolumn polskich nazw? Jeżeli dałem dla celów testowych, to nie oznacza, że kiepski jest ze mnie programista. Zaznaczę, do celów testowych, rozumiesz? I od kiedy nie można dawać auto_increment po id klucza głównego? Kto Ci to powiedział lub gdzie to wyczytałeś?
I jeszcze jedno, ja nie proszę o ocenę tabeli bazy danych, bo doskonale wiem, jak tworzyć tabele, i nie trzeba mi tego pisać, jak i też nie prosiłem o ocenę nawet samych tytułów kolumn. Sam doszedłem do tego, o czym na początku pisałem i po prostu przeoczyłem.
Temat uważam za zamknięty!

Nie potrzebnie się denerwujesz - wszyscy tu starali ci się pomóc. Nie miesza się, nawet testowo, żeby nie nabierać złych nawyków( tak samo stara się używać poprawnych tpoów danych - dla wyrabiania nawyku) . Potem używasz jakiegoś języka: Javy, php, czy czegoś , któy jest używa angielskich słów i wychodzi z tego koszmarek. tyle w temacie.
Nie mniej, ja ci nie będę mówił jak masz żyć - czepiam się bo to w oczy kłuje.

Napisałem wcześniej tak:

obstawiam w sumie głupią rzecz, ale jednak na nią bym postawił :slight_smile:
patrzysz nie na ilość rekordów a na maksymalne ID (35) , a któryś rekord usunąłeś ( czyli jest rekordów 34 faktycznie) , a autoincrement został no i to na pierwszy rzut oka cię męczy :slight_smile:

select count(1) from xlbmi
ile zwraca?

więc odgadłem w czym był problem - gdybyś wykonał to zapytanie, od razu zobaczyłbyś o co chodzi.

No i oczywiście autoincrement się daje ( choć często też korzystam osobiście z uuid- ale to inna historia) , natomiast traktuje się to jako „jakąś liczbę” najczęściej, a nie jako „kolejną liczbę”, żeby uniknąć błędów.
Nie robi się counta po kluczu głównym zazwyczaj - w sensie Max(id). Zazwyczaj Count(1) lub count(*) [nowe silniki sobie to i tak optymalizują].

Sam doszedłem do tego, o czym na początku pisałem i po prostu przeoczyłem.

A mogłeś przeczytać to, co napisałem :wink:

Tak czy siak- chciałem powiedzieć, że niepotrzebnie się denerwujesz. To, o czym tutaj z kolegami wspomnieliśmy to jakieś nasze doświadczenia przekazane w dobrej wierze. Nikt ci nie zarzuca, jak to napisałeś „że kiepski z ciebie programista”.

Dobrze, że się sprawa wyjaśniła tak czy siak :slight_smile: powodzenia w dalszej pracy.

1 polubienie