сравниваю две таблицы в одной может не совпадать строка в другой данные в строке.

кекс

Новичок
сравниваю две таблицы в одной может не совпадать строка в другой данные в строке.

тут меня любимая озадачила:
можно ли сравнить два файла excel и вывести разницу.
чисто теоретически я понимаю что можно.. по форуму поискал было приблизительное, но не то..
я нашел скрипт который excel файл загоняет в MySQL создавая таблицы и даже листы если их несколько...
остается сравнить таблицы..

разница в таблицах бывает такой что недостает нескольких строк.. или же изменения в поле таблицы... с полем в таблице еще как-то более понятно сравнил строки по id (которого кстати нет в таблицах, но можно создать при экспорте excel файла в MySQL) и если не совпаает то вывел.. а вот как быть если строк вобще нет...?? по какому параметру стравнивать таблицы? я не очень в MySQL, поэтому прошу помощи.
 

кекс

Новичок
:) в таком случае это будет немного проще в использовании..:
http://www.formulasoft.ru/excel-compare.html

но раз уж пол дела сделано, то хотелось бы и довести его доконца.

-~{}~ 14.06.07 12:35:

| id | name | street | phone | chto-to |
| 1 | name 1 | street 1 | phone 1 | chto-to 1 |
| 2 | name 2 | street 2 | phone 2 | chto-to 2 |
| 3 | name 3 | street 3 | phone 3 | chto-to 3 |
| 4 | name 4 | street 4 | phone 4 | chto-to 4 |
| 5 | name 5 | street 5 | phone 5 | chto-to 5 |
| 6 | name 6 | street 6 | phone 6 | chto-to 6 |
| 7 | name 7 | street 7 | phone 7 | chto-to 7 |


| id | name | street | phone | chto-to |
| 1 | name 1 | street 1 | phone 1 | chto-to 1 |
| 2 | name 2 | street 2 | phone 2 | chto-to 2 |
| 3 | name 4 | street 4 | phone 4 | chto-to 4 |
| 4 | name 5 | street 5 | phone 535 | chto-to 5 |
| 5 | name 6 | street 6 | phone 6 | chto-to 6 |
| 6 | name 7 | street 7 | phone 7 | chto-to 7 |

вот пример двух таблиц, как найти: удалена строка 3 из верхней и изменения строки 5 из верхней.. которая во второй стала 4 строкой..
 

alpine

Новичок
кекс
Найти измененные + удаленные строки - не проблема. Делается через LEFT/RIGHT JOIN, а вот чтобы точно отличить удаленную строку от измененной надо знать какое поле в строке не менялось, либо, как я понимаю, с какой-то вероятностью ...
 

кекс

Новичок
а можно примерчик как найти измененную и удаленную?

-~{}~ 14.06.07 13:56:

PHP:
CREATE TABLE `CFC_1181748791` (
  `id` int(11) NOT NULL auto_increment,
  `Complex` text NOT NULL,
  `Section` text NOT NULL,
  `apNo` text NOT NULL,
  `Rooms` text NOT NULL,
  `Floor` text NOT NULL,
  `Area` text NOT NULL,
  `Totalarea` text NOT NULL,
  `PriceEURO` text NOT NULL,
  `Description` text NOT NULL,
  `View` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=143 ;

-- 
-- Дамп данных таблицы `CFC_1181748791`
-- 

INSERT INTO `CFC_1181748791` VALUES (1, 'Complex', 'Section', 'ap.No', 'Rooms', 'Floor', 'Area', 'Total area', 'Price EURO', 'Description', 'View');
INSERT INTO `CFC_1181748791` VALUES (2, 'Crown Fort Club', 'A-1', '1', '2', '0', '60.98', '0', '81652.22', 'living room,kitchen box,WC/bathroom,bedroom,hall,terrace', 'sea/garden');
INSERT INTO `CFC_1181748791` VALUES (3, 'Crown Fort Club', 'A-1', '9', '2', '2', '65.230000000000000000', '5', '87342.97', 'living room,kitchen box,WC/bathroom,bedroom,hall,terrace', 'sea/garden');
INSERT INTO `CFC_1181748791` VALUES (4, 'Crown Fort Club', 'A-1', '19', '3', '6', '86.81', '5', '129650.74', '', 'sea');
INSERT INTO `CFC_1181748791` VALUES (5, 'Crown Fort Club', 'A-2', '24', '3', '1', '64.05', '75.56', '85762.95', 'kitchen box,WC/bathroom,2 bedrooms,hall,2 terraces', 'sea/garden');
INSERT INTO `CFC_1181748791` VALUES (6, 'Crown Fort Club', 'A-2', '27', '2', '2', '64.05', '75.56', '85762.95', 'living room,kitchen box,WC/bathroom,bedroom,hall,terrace', 'sea/garden');



вот пример таблицы..
дело в том что эта таблица создается при экспорте файла excel в MySQL
поэтому поля там могут быть совершенно разные..
им 7 вариантов присылают файлов в которых нужно найти различия, ну руками вот сидит она и делает этот обезьяний труд... а так загнал первый файл в базу загнал второй файл который прислали с изменениями и увидел результат..
 

chira

Новичок
кекс

Насколько я понял структура (набор колонок) в сравниваемых файлах одинакова ...
Можешь попробовать так:
1. импортируешь файлы в MySQL
2. выполняешь такой SQL
Код:
SELECT *
FROM (
(SELECT field1, field2 ... FROM table1)
UNION ALL
(SELECT field1, field2 ... FROM table2))
GROUP BY <список всех полей (кроме ID)>
HAVING COUNT(*) = 1
результатом будет список строк в которых что-то, поменялось или в одном из файлов удалилось
 

кекс

Новичок
PHP:
SELECT * 
FROM (
(SELECT `id`, `Complex`,  `Section`,  `apNo`,  `Rooms`,  `Floor`,  `Area`,  `Totalarea`,  `PriceEURO`,  `Description`,  `View` 
FROM $t1) 
UNION ALL 
(SELECT `id`, `Complex`,  `Section`,  `apNo`,  `Rooms`,  `Floor`,  `Area`,  `Totalarea`,  `PriceEURO`,  `Description`,  `View` 
FROM $t2)
) 
GROUP BY `Complex`,  `Section`,  `apNo`,  `Rooms`,  `Floor`,  `Area`,  `Totalarea`,  `PriceEURO`,  `Description`,  `View`
HAVING COUNT(*) = 1
ругается : Every derived table must have its own alias
а где тут алиасы писать? в смысле кому для первого чтоль селекта? попробовал все равно ругается.. на сервер залил, думал денвер может что не так.. там то же самое..

-~{}~ 14.06.07 16:13:

Автор оригинала: кекс
PHP:
SELECT * 
FROM (
(SELECT `id`, `Complex`,  `Section`,  `apNo`,  `Rooms`,  `Floor`,  `Area`,  `Totalarea`,  `PriceEURO`,  `Description`,  `View` 
FROM $t1) 
UNION ALL 
(SELECT `id`, `Complex`,  `Section`,  `apNo`,  `Rooms`,  `Floor`,  `Area`,  `Totalarea`,  `PriceEURO`,  `Description`,  `View` 
FROM $t2)
) 
GROUP BY `Complex`,  `Section`,  `apNo`,  `Rooms`,  `Floor`,  `Area`,  `Totalarea`,  `PriceEURO`,  `Description`,  `View`
HAVING COUNT(*) = 1
ругается : Every derived table must have its own alias
а где тут алиасы писать? в смысле кому... для первого чтоль селекта? попробовал все равно ругается.. на сервер залил, думал денвер может что не так.. там то же самое..
 

chira

Новичок
добавь алиас
...
FROM $t2)
) a
GROUP BY `Complex`, `Section`, `apNo`, `Rooms`, `Floor`, `Area`, `Totalarea`, `PriceEURO`, `Description`, `View`
...
 

кекс

Новичок
я наверное тормоз, где прочитать про алиасы... добавил А толку от этого..

-~{}~ 14.06.07 18:28:

SELECT str, count(*) as co FROM
(select CONCAT(Complex) AS str FROM $t1
union
SELECT CONCAT(Complex) AS str2 FROM $t2) AS tmp
group by str
having co=1

-~{}~ 14.06.07 18:44:

не.. ниче не катит.. не то ни это...

-~{}~ 14.06.07 20:12:

мож выходной сегодня помешал..
вобщем задача решена.. добавлением ALL

-~{}~ 14.06.07 20:13:

chira

спасибо, Ваш пример был близок к истине.
самый лучший!:)
 
Сверху