Skocz do zawartości

Ilość wierszy w tabeli


yavaho

Rekomendowane odpowiedzi

Mam tablicę bez pola auto_increment

Poleceniem SELECT...(WHERE = coś tam) znajduję jeden rekord w tabeli.

Jak teraz dowiedzieć się ile rekordów ("starszych") znajduje się w tablicy, licząc od początku do tego właśnie miejsca? Czyli wszystkie rekordy ktore zostały zapisane w tablicy wcześniej niż ten ostatnio znaleziony?

.

Odnośnik do komentarza
Udostępnij na innych stronach

błąd w koncepcji -> moja odpowiedz do skasowania...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

SELECT COUNT(*) FROM tabela WHERE id < (SELECT id FROM tabela WHERE name = "cos tam" )
Gdyby w tabeli było pole ID i to w dodatku auto_increment to by nie było problemu.

Talica wyglądna mniej więcej tak:

imie | kolor

--------------

Marek | biały

Łukasz | żółty

Michał | niebieski

Adam | biały

Piotrek | biały

imie jest jako PRIMARY KEY

Znajduje powiedzmy rekord "Adam" i chciałbym wiedzieć ile rekodów znajduję się przed nim

.

Odnośnik do komentarza
Udostępnij na innych stronach

imie jest jako PRIMARY KEY
Imię jako klucz główny tabeli to jakaś koncepcja rodem z przedszkola, ale w tym wypadku ułatwia bo w tym polu nie może się powtórzyć.

Wiec za pomocą samego SQL nie znajduje odpowiedzi na Twój problem, ale w SQL i PHP wiec coś w tym klimacie:

$pozycja = 0;
$zapytanie = mysql_query("Twoje zapytanie SQL");
while($rekord = mysql_fetch_object($zapytanie))
{
$pozycja ++;
if($rekord->imie == "Mietek") break;
}
echo 'Imie Mietek jest na '.$pozycja.' pozycji tabeli danych';

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

mam teraz podobny problem i wymyśliłem jeszcze cos takiego:

SELECT count(*) FROM  (SELECT @continue:=IF(@continue, @continue, 0), @continue :=  IF(imie='ba', @continue+1, @continue) as continue  FROM tabela HAVING continue=0) as e

(może być potrzeba wykonania przed tym SET @continue:=0)

Imię jako klucz główny tabeli to jakaś koncepcja rodem z przedszkola

Dlaczego? Jeśli imię ma być unikalne po co wprowadzać do tabeli niepotrzebne dane?

Odnośnik do komentarza
Udostępnij na innych stronach

Teraz to już się zastanawiam nad dodaniem do istniejacej już tablicy pola ID z auto_increment, albo innego gdzie bedzie zapisana kolejność. Bo widze że przy obecnym stanie wyciagnięcie tej informacji nie jest takie proste, jest zbyt dużo pętli co się odbije na wydajności.

Tylko czy jest możliwość dodania pola "ID" jako auto_increment i zostawienie głownego klucza na dotychczasowym polu "imie" ?

Czy auto_increment zawsze musi być głownym kluczem?

.

Odnośnik do komentarza
Udostępnij na innych stronach

E tam normalna złożoność liniowa (odpowiada zapytaniu select bez indeksu). Jak już chcesz koniecznie dodawać to ID to ustaw na to główny klucz a imię zrób kluczem unikalnym i tyle.

Z resztą tutaj chyba masz źle zaprojektowaną tabelę (tzn. chcesz coś zrobić, tylko nie wiesz za bardzo jak) - bo jeśli chodzi o zapisywanie kolejności to po prostu robisz do tego pole sortujesz po tym polu i już a nie się bawisz w jakieś auto incrementy, bo i tak one nic w takim wypadku nie dają

Co zrobisz, żeby wstawić coś do środka np. na pozycję 4? Wstawisz na pozycję 3 i przepiszesz numery pozycji <= 3 sortująć ASC tak, żeby każdy stał się unikalny.

Klucz główny imię, klucz nieunikalny - kolejność.

Odnośnik do komentarza
Udostępnij na innych stronach

Baza istniała juz od roku, a teraz po prostu zaszał potrzeba wyciągnięcia z niej dodatkowych danych. Przeprojektowanie bazy było raczej ostatecznością, ale okazało się to prościejszym rozwiązaniem niż złożone zapytania.

Kolejność sortowania miała odpowiadać kolejności zapisu, więc auto increment mógłby się do tego nadawać, ale klucz głowny musiał dalej pozostać na dotychczasowym polu (potrzebny głownie do zapytania REPLACE). Więc dodałem pole INT w ktorym zpisuje aktualny czas, co w zupełności wystarcza do ustawienia tej kolejności.

Dzięki za pomoc :piwo:

.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności