Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dodanie wielu rekordów do bazy pomiędzy wierszami
Forum PHP.pl > Forum > PHP
szczalpi
Witam
Mam pytanie do Was. Czy jest możliwość dodania automatycznie wielu pustych rekordów pomiędzy wierszami ?
Podaje dokładnie o co mi chodzi. Posiadam bazę danych, w kórej brakuje rekordów. Posiadam rekordy gdzie id jest 10 a następnie id zaczyna się od 300.
Moje pytanie jest następujące. Czy jest możliwość wstawienia rekordów w przedziale od 11 do 299 za pomocą składni. Wiem można dodać kolejne rekordy na piechotę, ale chciałbym zaoszczędzić trochę czasu.
Proszę Was o radę albo na kierować gdzie tego szukać.
Pozdrawiam
awaluk
Napisz kod z prostą pętlą?

A tak przy okazji to nie wiem co to dokładnie za baza, ale w większości przypadków id powinno być całkowicie unikalne - gdy coś tam zostało np. usunięte to powinna zostać luka.
Kshyhoo
link
szczalpi
Kasowałem rekordy i w tej chwili mam przerwę i chciałbym ją uzupełnić, aby rekordy miały kolejność.
awaluk
To konieczne aby miały kolejność? Dlaczego?
Bo może robisz sobie problem na siłę. Jak mówiłem, moim zdaniem o to chodzi, aby id zawsze pozostawało unikalne. Gdy coś tam skasujesz to ma zostać luka, żeby nie zdarzyło się, że zostanie jakieś powiązanie z danym id i w przyszłości wyjdą dziwne rzeczy.
szczalpi
Porządek chce klient. Cóż zrobić.
awaluk
No cóż, dalej nie rozumiem czemu koniecznie musi być ta kolejność, ale swój pomysł już napisałem - zrobiłbym prosty skrypt z pętlą, która doda te brakujące rekordy.
Kshyhoo
  1. <?php
  2. $tabela = "twoja_tabela";
  3.  
  4. if (mysql_connect($sql_serwer, $sql_login, $sql_haslo) and mysql_select_db($sql_baza)) {
  5.  
  6. if (mysql_query("SET @n:=0, @m:=0")) {
  7. $wynik1 = mysql_query("SELECT id, (@m:=@m+1) as nr FROM $tabela GROUP BY id HAVING id<>(@n:=@n+1) LIMIT 1");
  8. if (mysql_num_rows($wynik1)==0) {
  9. $wynik2 = mysql_query("SELECT max(id)+1 as nr FROM $tabela");
  10. }
  11. }
  12.  
  13. if ($wynik2 and $dane = mysql_fetch_array($wynik2)) {
  14. $nr = $dane["nr"];
  15. if ($nr<1) $nr = 1;
  16. } else echo "Błąd w danych...";
  17.  
  18. } else echo "Nie można połączyć się z bazą danych...";
  19.  
  20. echo "Najniższy dostępny numer indeksu to: $nr";
  21. ?>

Przepisz na mySQLi/PDO...
nospor
Cytat
Porządek chce klient. Cóż zrobić.
Moim zdaniem najzwyklej w swiecie zle zrozumiales i przedstawiasz nam tutaj to, co tobie sie wydaje ze chcesz zrobic by uzyskac to co klient chce. Tylko robisz krzywde sobie i klientowi w ten sposob.

Mozesz napisz co dokladnie zawiera tabela i co dokladnie powiedzial klient.
Pyton_000
Zamiast wyświetlać ID w tabelach jako nr. porządkowy wystarczy zrobić licznik wink.gif
bostaf
Albo tak, samym sqlem:
  1. INSERT INTO tab_1(kolumna_z_id)
  2. SELECT nowy_id FROM (
  3. SELECT @num:=@num+1 nowy_id
  4. FROM tab_2, (SELECT @num:=0) a
  5. ) a
  6. WHERE nowy_id NOT IN (SELECT kolumna_z_id FROM tab_1) AND nowy_id < N;


gdzie:
- N na końcu to liczba wszystkich wierszy, które chcesz mieć wypełnione
- tab_1 to nazwa Twojej tabeli (tej z lukami),
- kolumna_z_id chyba jasne - to nazwa kolumny zawierającej ID w tab_1
- tab_2 to nazwa jakiejkolwiek innej istniejącej tabeli, która ma minimum N wierszy

To zadziała na lukach w jakimkolwiek miejscu. Pozostałe kolumny w tab_1 zostaną oczywiście wypełnione wartościami domyślnymi.
Pyton_000
Nie ma sensu do takiego czegoś wrzucać sql, szkoda bazy na takie pierdoły smile.gif Ale tak, tak też można.
bostaf
Cytat(Pyton_000 @ 11.05.2017, 21:53:16 ) *
Nie ma sensu do takiego czegoś wrzucać sql, szkoda bazy na takie pierdoły smile.gif Ale tak, tak też można.

smile.gif To brzmi jak "Nie ma sensu wbijać gwoździa młotkiem, szkoda młotka. Ale tak - młotkiem też można." wink.gif
Pyton_000
To raczej "Nie ma sensu wbijać gwoździa młotkiem udarowym, ale tak, da się biggrin.gif"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.