Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Porównywanie całych rekordów
radziel
post
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 25.04.2003
Skąd: Olsztyn

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


Witam,
mam następujący problem:

Czy w MySQL 4.1 istnieje jakiś mechanizm który porównał by mi wartości pól z dwóch rekordów tej samej tabeli i zwrócił jedynie te które się nie pokrywają? Google nic sensownego nie zwróciło dla "mysql compare records" więc postanowiłem Was zapytać.

Np. dla danych:
Kod
id | name   | city    | country | code |
2  | Donald | Olsztyn | Poland  | 3546 |
6  | Marek  | Olsztyn | Poland  | 6566 |


Chcę uzyskać:
Kod
id | name   | city    | country | code |
6  | Marek  | null    | null    | 6566 |

lub coś o podobnej strukturze.

Bez problemu mógłbym to osiągnąć używając do porównania PHP, ale chciałbym się dowiedzieć czy istnieje rozwiązanie umożliwiające przerzucenie tej pracy na silnik bazy.


--------------------
r.
Go to the top of the page
+Quote Post
Harmider
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 2
Dołączył: 1.02.2007

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


Wydaje mi się, że i owszem można,
Nie chce mi się tego sprawdzać, ale gdyby mi się kiedyś zachciało postąpił bym tak (zakładając, że znam id obu porównywanych wierszy)

  1. SELECT `row2`.`id`,
  2. IF(`row1`.`name` != `row2`.`name`, `row2`.`name`, NULL) AS `name`,
  3. IF(`row1`.`city` != `row2`.`city`, `row2`.`city`, NULL) AS `city`,
  4. IF(`row1`.`country` != `row2`.`country`, `row2`.`country`, NULL) AS `country`
  5. IF(`row1`.`code` != `row2`.`code`, `row2`.`code`, NULL) AS `code`
  6. FROM `tablica` AS `row1`
  7. LEFT JOIN `tablica` AS `row2` ON `row2`.`id` = 6
  8. WHERE `row1`.`id` = 2;


Mam wątpliwości czy baza nie zwróci błędu przez to, że zrobiłem JOIN na tej samej tablicy, nie pamiętam czy tak wolno postępować aaevil.gif
Proszę daj znać, czy to działa.
Go to the top of the page
+Quote Post
radziel
post
Post #3





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 25.04.2003
Skąd: Olsztyn

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


Cytat(Harmider @ 12.09.2008, 18:40:02 ) *
Proszę daj znać, czy to działa.

Działa.
Zapomniałeś o przecinku na końcu 4 linii listingu ;-)

Wielkie dzięki za pomoc.


--------------------
r.
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 Aktualny czas: 20.08.2025 - 07:29