Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]Sprawdzenie i skopiowanie rekordu
Forum PHP.pl > Forum > PHP
gregi1
Mam taki problem. Przerabiam sobie schemat bazy danych i napotkalem na taki problem.

Otoz z 3 tabel musze stworzyc jedna smile.gif
Tabele: WPIS, RELACJA, KATEGORIA

W tabeli WPIS sa rekordu z nieuzupelnionym polem kategorii (category), natomiast tabela RELACJA zawiera relacje między rekordem z WPIS a KATEGORIĄ.

Napisałem sobie skrypt który uzupełni mi pole category w tabeli WPIS.

  1. <?php
  2. ...polaczenie z baza...
  3.    
  4. $zapytanie='Select id_pod,id_wpi from otwarty_relacje';
  5.  
  6. $result = mysql_query($zapytanie);
  7. $num_rows=mysql_num_rows($result);
  8. if ($num_rows != 0){
  9. while ($row = mysql_fetch_array($result)) {
  10.  
  11. $wstawienie="update otwarty_wpisy set category='".$row[0]."'where id='".$row[1]."'";
  12. mysql_query($wstawienie);
  13. ?>


I działa poprawnie gdyby nie mankament ze stara wersja pozwalala dla jedego rekordu przypisac (dzieki tabeli RELACJA) kilka kategorii. CZYLI w starej wersji mogło występować kilka id_wpis i każdemu mógł być przypisany inny id_pod.
W nowej wersji dla jednego id może być jeden id_pod.

I chodzi mi o to jak zmienić ten skrypt, że w przypadku kiedy wystąpi w petli kolejne takie samo id to nie zostanie przypisane w polu category nowe id_pod tylko najpierw zostanie skopiowany dany rekord, wstawiony w tabeli i dopiero w nim wstawione to nowe id_pod.

Czy da sie to w jakis prosty sposob zrobic, czy jednak bedzie szybciej jak zrobie to recznie?



A jeszcze pytanie, znalazlem taki kod:

  1. INSERT INTO test (id, pole2, pole3 ...) SELECT id, pole2, pole3 ... FROM test WHERE id=100


Kod kopiuje mi dany rekord ale czy da sie jakos umiescic w tym kodzie aby ten nowy rekord mial wskazany przeze mnie nowy id?
Darti
Cytat(gregi1 @ 3.07.2009, 20:13:09 ) *
czy da sie jakos umiescic w tym kodzie aby ten nowy rekord mial wskazany przeze mnie nowy id?


W jaki sposób chcesz wskazać id nowego rekordu i dlaczego jest to dla Ciebie takie ważne żeby ten rekord wstawić właśnie z tym ID?

jak chcesz połączyć dwie tabele w jedną to użyj JOIN'a albo stwórz nową tabelę np tak:

  1. CREATE TABLE `wpis_z_kategoria` (
  2. SELECT w.*, k.id FROM otwarty_kategoria k, otwarty_relacje r, otwarty_wpis w WHERE k.id = r.id_pod AND r.id_wpi = w.id
  3. )
gregi1
Bo zczytujac z innej tabeli id i przypisujac im category (bylo kilka takich samych id dla roznych kategorii) i tym sposobem zapisywalo mi tylko jedna kategorie.

Oki, poradziłem sobie, nie wyjaśnie jak bo to bylo troche zagmatwane. I trudno to opowiedziec, ale w skrocie dodalem sobie nowe pole w bazie id_n z automatyczna numeracja stare id_zamienialem na id+1000 i sie udalo.
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.