Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Trzy pytania do bardziej zaawansowany w MySQL i PHP, Trzy pytania do bardziej zaawansowany w MySQL i PHP
mako11
post 4.12.2014, 11:51:39
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 22.02.2012

Ostrzeżenie: (0%)
-----


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. }





Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
modern-web
post 4.12.2014, 11:56:07
Post #2





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


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.

Ten post edytował modern-web 4.12.2014, 11:56:55


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
aniolekx
post 4.12.2014, 12:21:28
Post #3





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
mako11
post 7.12.2014, 12:24:14
Post #4





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 22.02.2012

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mako11 7.12.2014, 12:23:42
Go to the top of the page
+Quote Post
Turson
post 7.12.2014, 12:25:39
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Może być pusta wartość, ale taki indeks w tablicy musi istnieć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:12