Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 2 pętle i zapytanie
Forum PHP.pl > Forum > PHP
WoGuziczek
Witam!

Moje zadanie jest zdeczka skomplikowane.

Mam bazę danych w których są dwie tabele.
W pierwszej są dwa pola (id, autor książki).
W drugiej (id, autor książki, tytuł książki).

Chciałem wykonać odpowiednią pętlę, która zamieni mi drugą tabelę w ten sposób, że
zamiast nazwy autora książki będzie id autora z pierwszej kolumny:
(id, id autora, tytuł książki).
Nie robiłem update do kolumny drugiej, tylko utworzyłem trzecią kolumnę i będę chciał do niej załadować już "po nowemu"

Robiłem to tak:
  1. function sqlclr($input)
  2. {
  3. htmlspecialchars_uni(mysql_real_escape_string($input));
  4. return $input;
  5. }
  6. $artysci_gotowe = mysql_query("
  7. SELECT id, nazwa_autora
  8. FROM `TABELA1`
  9. ORDER BY `id` ASC
  10. ");
  11. $baza_old = mysql_query("
  12. SELECT autor_ksiazki, tytul
  13. FROM `TABELA2`
  14. ORDER BY `id` ASC
  15. ");
  16. while ($pobierzartystow = mysql_fetch_array($artysci_gotowe))
  17. {
  18. $autorid = sqlclr($pobierzartystow['id']);
  19. $nazwa_autora = sqlclr($pobierzartystow['nazwaartysty']);
  20.  
  21. while($starocie = mysql_fetch_array($baza_old))
  22. {
  23. $autor_ksiazki = sqlclr($starocie['autor_ksiazki']);
  24. $tytul = sqlclr($starocie['tytul']);
  25.  
  26. if ($nazwa_autora == $autor_ksiazki)
  27. {
  28. $query = "
  29. INSERT INTO `TABELA3`
  30. (autorid, title)
  31. VALUES (
  32. '" . $autorid . "',
  33. '" . $tytul . "'
  34. )
  35. ";
  36. mysql_query($query);
  37. }
  38. }
  39. }


Generalnie spełniło to funkcję, ponieważ dopasowała id do autora, ale tylko dla pierwszego wpisu w TABELI2.
Potem już wszystkie są takie same (czyli jeżeli pierwszy autor miał id 6 - to wszystkie wpisy w tabeli mają id 6 ;/). Kombinowałem użyć jakiegoś continue;, ale nadal to samo.
Myślę obecnie nad foreach.

Co o tym myślicie?
// Nie patrzcie na jakieś błędy literówek, składni czy funkcji. I tak piszę to na innym silniku, ale napisałem tutaj w ten sposób, żeby było czytelniejsze i zrozumiałe.
redeemer
Witam.

Domyślam się, że ma to być wykonane jednorazowo, więc po co sobie utrudniać życie - wystarczy sam SQL:

  1. UPDATE Tabela2 SET autor_id = (SELECT id FROM Tabela1 WHERE Tabela2.autor=Tabela1.autor);


Oczywiście najpierw trzeba by dodać do 'Tabela2' kolumnę 'autor_id', a następnie po zabiegu usunąć kolumnę 'autor'.

Pozdrawiam,
WoGuziczek
Padłem...
Moje 40 linijek kodu vs Twoja jedna linijka.
Twoje działa smile.gif

Dzięki bardzo winksmiley.jpg
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.