Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Trzy pytania do bardziej zaawansowany w MySQL i PHP
Forum PHP.pl > Forum > Przedszkole
mako11
Trzy pytania do bardziej zaawansowany w MySQL i PHP

1. Mam dwie tabele w bazie danych np:
Tabela1
|id|nazwisko|imię|data|liczba|
kolumna id jest kluczem podstawowym
Tabela2
|id|dane przetworzone|liczba przetworzone|
tu to samo id jest kluczem podstawowym
dane do tej tabeli będą wprowadzane dopiero po wyciągnięci i przetworzeniu
Czyli aby połączyć relatywnie te dwie tabele kluczem obcym ma być kolumna id ?

2. Jak zrobić aby każdy pojedynczy wiersz z Tabeli2 odpowiadał wierszowi z Tabeli1 , tak aby dane z wiersza tabeil1 id=1 były przetworzone i zapisane do wiersza tabeli2 o id=1 ?
Aby nie było przekłamań a dane były powiązane między tabelami.

3. Czy jest to odpowiedni sposób, po łączeniu do bazy danych MySQL dodawać wiele rekordów za pomocą pętli czy istnieje lepsze rozwiązanie?

  1. $db =new mysqli('localhost', 'test', 'test', 'baza');
  2. if (mysqli_connect_errno())
  3. {
  4. echo 'Błąd: Połączania z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
  5. }
  6.  
  7. for($x=0;$x<10;$x++)
  8. {
  9. $zapytanie = "insert into tabela (kolumna1 kolumna2) values('dane', 'dane');
  10. $wynik = $db->query($zapytanie);
  11. }





modern-web
1. Zależy jakiego typu relację chcesz utworzyć, 1-1, wiele-1, 1-wiele, wiele-wiele? W przypadku 1-1 możesz zwyczajnie połączyć id Tabela1 z id Tabela2, w innym wypadku przyda się dodatkowa kolumna.

2. Patrz wyżej, relacja 1-1. Wyłącz na jednej z kolumn auto increment, i wstawiaj do niej id wyciągnięty z drugiej.

3. Lepiej używać PDO. Pamiętaj o filtrowaniu danych. Generalnie ok.
aniolekx
Dla relacji 1:1 czyli dla dowolnego rekordu z Tableli1 może istnieć co najwyższej jeden odpowiadający rekord w Tabeli2
wtedy Tablea2 musi mieć na kluczu obcym założone primary key (klucz podstawowy, co gwarantuje ze będzie unikalne) i założone Constraint (ograniczenie).
  1. CREATE TABLE `tablea2` (
  2. `id` int NOT NULL,
  3. `dane` text,
  4. `liczba` int,
  5. PRIMARY KEY (`id`),
  6. CONSTRAINT `FK1_tablea2` FOREIGN KEY (`id`) REFERENCES `tabela1` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
  7. )
  8. COLLATE='latin1_swedish_ci'
  9. ENGINE=InnoDB;

Wrzucanie INSERET'a w pętle nie jest optymalne, lepiej jest zrobić jeden INSERT, dla wszystkich danych:
  1. $zapytanie = "insert into tabela (kolumna1 kolumna2) values('dane', 'dane'), ('kolejne_dane', 'kolejne_dane'), ('i_tak_dalej_kolejne_dane', 'i_tak_dalej_kolejne_dane') ;
  2. $wynik = $db->query($zapytanie);
mako11
dzięki za bardzo szybką odpowiedź, co do tematu
1.
raczej tabele będą w relacji 1do1

2.
modern-web
Cytat
2. Patrz wyżej, relacja 1-1. Wyłącz na jednej z kolumn auto increment, i wstawiaj do niej id wyciągnięty z drugiej.

czyli id z tableli1 ma być kluczem obcym dla tabeli2




Dalej idąc tym tokiem myślowym pytani z PHP biblioteka PDO

jak podpinam zmienną do zapytania np:
  1. $stmt -> bindValue(':dane', $dane[1] );

Czy zmienna $dane[1] musi zawierać wartość , jak podpiąć zmienną która może być pusta.
Turson
Może być pusta wartość, ale taki indeks w tablicy musi istnieć.
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.