Мне нужно уметь отличать результаты двух запросов, показывая строки, которые находятся в «старом» наборе, но не находятся в «новом» ... и затем показывают строки, которые находятся в «новом», но не старый.Эффективно получить diff от большого набора данных?
Прямо сейчас, я вытягиваю результаты в массив, а затем делаю массив_дифф(). Но, я сталкиваюсь с некоторыми проблемами ресурсов и времени, поскольку наборы близки к 1 миллиону строк.
Схема одинакова в обоих наборах результатов (запрет номера setId и номера автоинкремента таблицы), поэтому я предполагаю, что есть хороший способ сделать это непосредственно в MySQL ... но я не нашел, как это сделать.
Example Table Schema:
rowId,setId,userId,name
Example Data:
1,1,user1,John
2,1,user2,Sally
3,1,user3,Tom
4,2,user1,John
5,2,user2,Thomas
6,2,user4,Frank
То, что я нуждаясь сделать, это выяснить, добавляет/удаляет между SETID 1 и 2. SETID
Таким образом, результат должен дифф (для примера) показывают:
Rows that are in both setId1 and setId2
1,1,user1,John
Rows that are in setId 1 but not in setId2
2,1,user2,Sally
3,1,user3,Tom
Rows that are in setId 2 but not in setId1
5,2,user2,Thomas
6,2,user4,Frank
Я думаю, что это все подробности. И я думаю, что вернул пример. Любая помощь будет оценена по достоинству. Решения в MySQL или PHP хороши для меня.
Going дать этому выстрел в эти выходные. Спасибо за быстрый ответ. –