Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kopiowanie wpisów z bazy
Forum PHP.pl > Forum > Przedszkole
pawel06281990
Witam,

mam problem z kopiowaniem tych samych rekordów po połączeniu 2 tabel jedna tabela przetrzymuje wpisy takie jak imię, nazwisko itp, a w drugiej mam zdjęcia, ale nie wiem czemu jak porównuje dwa pola id robi mi kopię rekordów.

Tak wygląda skrypt

  1. $where = $this->wyszukajwhere($check_nazwisko,$check_ur,$check_zg,$nazwisko,$dataUrodzenia,$dataSmierci,$imie);
  2. $wynik = $this->wpdb->get_results("SELECT w.*, f.* FROM ".$this->wyszukiwarka_table." w
  3. LEFT JOIN ".$this->wyszukiwarka_fotografie_table." f ON w.faraID=f.grobID WHERE $where ORDER BY Id ASC");
  4.  
  5. if($this->wpdb->num_rows <= 0) {
  6. $content ='<div class="callout callout-warning">';
  7. $content .='<h5>'.__('Brak wyników','wp-zmarli').'</h5>';
  8. $content .='<p>'.__('Nie znaleziono wyników wyszukiwarki!','wp-zmarli').'</p>';
  9. $content .='<p>'.__('Szukane w wyszukiwarce: ','wp-zmarli').'</p>';
  10. $content .= $this->wyszukajbaza($check_nazwisko,$check_ur,$check_zg,$nazwisko,$dataUrodzenia,$dataSmierci,$imie);
  11. $content .=' <p>'.__('Sprawdź dane i spróbuj ponownie jeszcze raz ','wp-zmarli').'</p>';
  12. $content .=' <a href="wyszukiwarka/" >'.__('Wróć do wyszukiwarki','wp_zmarli').'</a>';
  13. $content .='</div><br />';// Gdy nie znajdzie rekordów
  14. echo historia_zamowien(($current_user->user_login ? $current_user->user_login : __('Anonimowy','wp-zmarli')),'',__('Nie znaleziono wyników wyszukiwarki!','wp-zmarli'),"wyszukiwarka",'', time(),"2");
  15. } else {
  16.  
  17. $totalResults = count($wynik);
  18. $lastDigit = substr ($totalResults, -1);
  19. $content = '<h3>Znaleziono ';
  20. if ($totalResults==1) $content .= '1 osobę';
  21. else if ($lastDigit==2 or $lastDigit==3 or $lastDigit==4) $content .= $totalResults.' osoby'; else $content .= $totalResults.' osób';
  22. $content .= '</h3>';
  23. $content .=" <div class='row'>";
  24. foreach ($wynik as $pochowany){
  25. if($pochowany ->status == 1){
  26. $zdjecia ='<img style="width:20px; height:20px;" title="'.__('Prośba o pilny kontakt z kancelarią','wp-zmarli').'" src="'.ZMARLI_URL.'assets/images/pilny_kontakt.png"/>';
  27. }else{
  28. $zdjecia ='<img style="width:20px; height:20px;" title="'.__('Wszystko w porządku','wp-zmarli').'" src="'.ZMARLI_URL.'assets/images/ok.png"/>';
  29. }
  30. $content .="<div class='col-sm-4'>
  31. <div class='card' style='width: 18rem;'>";
  32. if($pochowany->plikNaSerwerze <= ''){
  33. $content .=" <img src='../wp-content/plugins/wp-zmarli/assets/images/brak_zdjecia.jpg' class='card-img-top' >";
  34. }else{
  35. $content .=" <img src='../wp-content/uploads/images/groby/".$pochowany->plikNaSerwerze."' class='card-img-top'>";
  36. }
  37. $content .="<div class='card-body'>";
  38. $content .="<h5 class='card-title'>śp.".mb_strtoupper($pochowany->imie.' '.$pochowany->nazwisko, 'UTF-8')." ".$zdjecia."</h5>";
  39. $content .="<p class='card-text'>".esc_html('Data Urodzienia', 'zmarli')." ".$pochowany->dataUrodzenia." <br /> ".esc_html('Data Śmierci', 'wp-zmarl')." ".$pochowany->dataSmierci." &nbsp;&nbsp;&nbsp;†</p>";
  40.  
  41. $content .="<a href='../podglad/?Id=".$pochowany->Id."&faraid=".$pochowany->grobID."&p1=".$pochowany->p1."&p2=".$pochowany->p2."&p3=".$pochowany->p3."' class='btn btn-primary'>".esc_html('Więcej', 'wp-zmarl')."</a>";
  42. $content .="</div>";
  43. $content .="</div>";
  44. $content .="<br /><br />";
  45. $content .="</div>";
  46. }
  47.  
  48. $content .="</div>";
  49. $content .=" <div class='row'>";
  50. $content .="<div class='col-sm-12' style='background-color :#9C9C9C' >";
  51. $content .='<img title="'.__('Wszystko w porządku','wp-zmarli').'" src="'.ZMARLI_URL.'assets/images/ok.png"/>'.__('Wszystko w porządku','wp-zmarli').' <img title="'.__('Prośba o pilny kontakt z kancelarią','wp-zmarli').'" src="'.ZMARLI_URL.'assets/images/pilny_kontakt.png"/>'.__('Prośba o pilny kontakt z kancelarią','wp-zmarli').'';
  52.  
  53. $content .="</div>";
  54.  
  55.  
  56.  
  57. $content .="</div>";
  58. echo historia_zamowien(($current_user->user_login ? $current_user->user_login : __('Anonimowy','wp-zmarli')),'',__('Wyszukiwanie poprawne','wp-zmarli'),"wyszukiwarka",'', time(), "1");
  59. }


I nie wiem czemu tak robi powinien porównać id w.faraID=f.grobID jak jest identyczne to wyświetlić jeden rekord.
nospor
No tak to dziala wlasnie. Jesli bazowa tabela ma jeden rekord , a druga tabela ma X rekordow odpowiadajacych temu z pierwszej tabeli, to dostaniesz X rekordow na zwrocie, ktore potem sobie pogrubuj w php i wyswietlaj jak ci sie podoba
pawel06281990
Ale kiedy porównuje id tworzone z automatu to mi wyświetla pojedynczo


Edit: Ok wystarczyło dodać GROUP BY grobID i teraz działa jak należy
nospor
Ale jak dodasz groub by to nie dostaniesz wiekszej liczby zdjec dla rekordu a tylko jeden.
pawel06281990
Bo ja w bazie mam aby jedno zdjęcie przepisane do danej osoby
nospor
No to nie kumam jakim cudem ci sie rekordy duplikuja. Widac gdzies indziej masz wiele danych do jednego rekordu
trueblue
Może złączenie jest na nieprawidłowych polach/wartościach?
pawel06281990
Cytat(nospor @ 22.03.2022, 13:16:32 ) *
No to nie kumam jakim cudem ci sie rekordy duplikuja. Widac gdzies indziej masz wiele danych do jednego rekordu


Bo jak wpisuje np. Kowalski Jan to mam dwa razy pokazany wpis Kowalski Jan ten sam wpis jest dublowany 2 razy
nospor
No ja to rozumem.
Nie rozumiem czemu tak sie dzieje skoro mowisz ze obie tabele masz w relacji 1:1
Wiec albo ci sie tylko wydaje ze tam jest 1:1 albo laczysz po zlych polach jak zasugerowal trueblue
pawel06281990
Przerabiam skrypt od producenta i czytałem jego dokumenty które wydał i id podpiąłem dobrze, bo producent napisał ze można dostosować pod własną koncepcje, więc to zrobiłem ale tez nie wiem czemu mi to tak robi że kopiuje


Tak wygląda tabela główna

  1. `wp_wyszukiwarka` (
  2. `Id` smallint(6) NOT NULL,
  3. `faraID` int(11) NOT NULL,
  4. `cmentarzID` int(11) NOT NULL,
  5. `nazwisko` varchar(75) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  6. `imie` varchar(75) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  7. `dataUrodzenia` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  8. `dataSmierci` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  9. `p1` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  10. `p2` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  11. `p3` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  12. `p4` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  13. `p5` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  14. `p6` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  15. `p7` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  16. `p8` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  17. `grvid` int(11) NOT NULL,
  18. `status` tinyint(4) DEFAULT 0
  19. )


Tak wygląda tabela ze zdjęciami
  1. `wp_wyszukiwarka_fotografie` (
  2. `idfoto` smallint(6) NOT NULL,
  3. `faraID` int(11) NOT NULL,
  4. `cmentarzID` int(11) NOT NULL,
  5. `grobID` int(11) NOT NULL,
  6. `typ` int(11) NOT NULL,
  7. `plikLokalny` varchar(1000) COLLATE utf8_polish_ci NOT NULL,
  8. `plikNaSerwerze` varchar(1000) COLLATE utf8_polish_ci NOT NULL
  9. )


ID które porównuje jest to faraID to wyszukiwarka a zdjęcia mają zmienione nazwę na id z wyszukiwarki grobID

Teraz pokaże jak to wygląda po dodaniu w bazie jeden przykład

wyszukiwarka
  1. moja nazwa id nadana automatycznie >1, faraID->1, a to jest id cmnetarza->1, 'Stefaniak', 'Stanisław', '--/--/1901', '--/--/1987', 'A', 'I', '2', '', '', '', '', '', 2, 0

Teraz tabela ze zdjęciami
  1. (moje id które sam sworzyłem ->1, faraID->19234, a to jest id cmnetarza->1,grobID-> 1, typ->0, 'c:\\fara_serwer\\foto\\foto_iii_2015\\a_i_1.jpg', 'A_I_1.JPG')


Tak wyglada
nospor
Pokaz strukture tych dwoch tabel i pare rekordow z nich dla ktorych duplikuje ci rekordy

No i czemu robisz
ON w.faraID=f.grobID
a nie
ON w.faraID=f.faraID
?

Cytat
ID które porównuje jest to faraID to wyszukiwarka a zdjęcia mają zmienione nazwę na id z wyszukiwarki grobID

Teraz pokaże jak to wygląda po dodaniu w bazie jeden przykład

wyszukiwarka

[PHP] pobierz, plaintext

moja nazwa id nadana automatycznie >1, faraID->1, a to jest id cmnetarza->1, 'Stefaniak', 'Stanisław', '--/--/1901', '--/--/1987', 'A', 'I', '2', '', '', '', '', '', 2, 0


Teraz tabela ze zdjęciami

[PHP] pobierz, plaintext

(moje id które sam sworzyłem ->1, faraID->19234, a to jest id cmnetarza->1,grobID-> 1, typ->0, 'c:\\fara_serwer\\foto\\foto_iii_2015\\a_i_1.jpg', 'A_I_1.JPG')

I w tabeli ze zdjeciami masz wiecej rekordow ktore maja grobID = 1?
pawel06281990
Już chyba wiem czemu ni dubluje z tabeli ze zdjęciami, bo mi się rekordy powtarzają

Wyszukiwarka

  1. (63,faraID-> 63, 1, 'Kowalski', 'Tadeusz Jerzy', '--/--/1932', '27/10/1980', 'A', 'I', '44', '', '', '', '', '', 66, 0),



tabela ze zdjęciami
  1. (84, 19276, 1, grobyID->63, 0, 'c:\\fara_serwer\\foto\\foto_iii_2015\\a_i_42.jpg', 'A_I_42.JPG'),
  2. (85, 12652, 1, grobyID->63, 0, 'c:\\fara_serwer\\foto\\foto\\a_i_42.jpg', 'A_I_42.JPG'),


Ok Muszę zgłosić to do producenta programu, żeby nie dublowało tych samych rekordów dla zdjęć, bo załóżmy, że w jednym grobie leżą dwie osoby to powinno być jedno zdjęcie bo grób jest taki sam.
nospor
Ha, od poczatku to mowilismy wink.gif
pawel06281990
No tak, ale teraz jak się przyjrzałem to zauważyłem, bo oryginalna wersja bazy jest tak

Wyszukiwarka oryginał
  1. `faraID` integer NOT NULL,
  2. `cmentarzID` integer NOT NULL,
  3. `nazwisko` VARCHAR (75) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  4. `imie` VARCHAR (75) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  5. `dataUrodzenia` VARCHAR (10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  6. `dataSmierci` VARCHAR (10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  7. `p1` VARCHAR (30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  8. `p2` VARCHAR (30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  9. `p3` VARCHAR (30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  10. `p4` VARCHAR (30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  11. `p5` VARCHAR (30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  12. `p6` VARCHAR (30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  13. `p7` VARCHAR (30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  14. `p8` VARCHAR (30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  15. `grvid` integer NOT NULL);


Tabela zdjęć
  1. `faraID` integer NOT NULL,
  2. `cmentarzID` integer NOT NULL,
  3. `grobID` integer NOT NULL,
  4. `typ` integer NOT NULL,
  5. `plikLokalny` VARCHAR (1000) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  6. `plikNaSerwerze` VARCHAR (1000) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL);


Tak wygląda oryginał ja dopisałem sobie Id dla wyszukiwarki i idfoto dla zdjęć
nospor
swoja droga kiepski ten producent.
Jak on daty jako teksty trzyma to poprostu zalamka
`dataUrodzenia` VARCHAR (10)
pawel06281990
Bo program trzyma daty w ten sposób 20/08/2001
viking
Tym gorzej, powinien trzymać jak nospor pisał a formatowanie daty to inna bajka.
nospor
Cytat
Bo program trzyma daty w ten sposób 20/08/2001

No i? To nie ma zadnego znaczenia, koles co to pisal mial blade pojecie o bazach/php i tyle w temacie
gino
Nie chciałbym Cie jeszcze bardziej dołować, ale nawet w sprawozdaniach wykonawczych komisji UE jest narzucony format daty zgodny z ISO 8601. Natomiast w Polsce przyjęło się zapisywać dzień.miesiąc.rok. Skąd taki format u Ciebie? I jeszcze mnie jedno ciekawi, co to znaczy, że program tak trzyma daty? Program niczego nie trzyma... A czepiam się słówek, bo z tego same nieporozumienia są.
pawel06281990
Cytat(gino @ 23.03.2022, 13:31:56 ) *
Nie chciałbym Cie jeszcze bardziej dołować, ale nawet w sprawozdaniach wykonawczych komisji UE jest narzucony format daty zgodny z ISO 8601. Natomiast w Polsce przyjęło się zapisywać dzień.miesiąc.rok. Skąd taki format u Ciebie? I jeszcze mnie jedno ciekawi, co to znaczy, że program tak trzyma daty? Program niczego nie trzyma... A czepiam się słówek, bo z tego same nieporozumienia są.


Program do ewidencji cmentarzy ma taki format bo wszystkie daty wpisuje się ręcznie program nazywa się fara.
nospor
Dobrze, ale daty wpisujesz w programie a nie bezposrednio w bazie. A koles co robil ten program, dal ciala z polem daty i tyle w temacie smile.gif
gino
Cytat
Program do ewidencji cmentarzy ma taki format bo wszystkie daty wpisuje się ręcznie program nazywa się fara.

I jak napisał @nospor bardzo fajnie, ale baza danych to jedno, a program który sformatuje Tobie daty to druga rzecz:
Kod
$date = new DateTime('2001-07-15');
echo $date->format('d/m/Y');

Da się? Be znajmniejszego problemu. Za poprzednikami powiem, że typ pola data w tabelach Twojej bazy jest nieprawidłowy i tyle w temacie.
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.