Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Porównywanie całych rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
radziel
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.
Harmider
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.
radziel
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.
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.