Несколько компьютеров отсылают данные.
Каждая машина отсылает:
[Объект 1], Значение А: [некое_число], Значение Б: [некое_число]
[Объект 2], Значение А: [некое_число], Значение Б: [некое_число]
...
Объектов может быть аж до 500-600, названия разные. Однако каждая машина отсылает одинаковые названия для каждого объекта (что логично).
Значений на Объект от одной машины только 2: А и Б.
Задача:
Сравнить Значения между Машинами по Объектам так, чтобы вывести данные, если выполнено следующее условие:
(Значение А = 2, а Значение Б > 5) или (Значение Б = 2, а Значение А > 5)
или
(Значение А = 3, а значение Б > 6) или (Значение Б = 3, а Значение А > 6)
Между всеми машинами. При этом, чтобы сравнение было только между Значениями А и Б (А-А и Б-Б недопустимо), на разных машинах (т.е. А одной машины и Б другой. А и Б одной машины не сравниваются) при одинаковых Объектах (т.е. данные Объекта 1 нельзя сравнивать с данными Объекта 2).
Пример:
Таблица с данными:
| Маш 1 | Маш 2 | Маш 3 | Маш 4 |
| А | Б | А | Б | А | Б | А | Б |
------------------------------------------
Объект 1 | 3 | 5 | 0 | 0 | 2 | 1 | 2 | 2 |
Объект 2 | 3 | 4 | 1 | 3 | 7 | 2 | 2 | 2 |
Объект 3 | 2 | 6 | 1 | 4 | 2 | 1 | 2 | 2 |
По данной таблице должно получится:
Объект 2, Маш 4 (Б = 2), Маш 3 (А = 7)
Объект 3, Маш 3 (А = 2), Маш 1 (Б = 6)
Объект 3, Маш 4 (А = 2), Маш 1 (Б = 6)
Объект 2, Маш 2 (Б = 3), Маш 3 (А = 7)
Не обязательно в таком формате, главное - название объекта, какая машина, какие данные и по какому значению (А, или Б).
Таблица в БД аналогичная, столбцы: ID (ключ), Объект, Маш1А, Маш1Б, Маш2А ...
Тип поля Объект - char(30), всё остальное - int.
Никак не соображу, как составить запрос так, чтобы сделать такую выборку (каким образом её осуществить). Или последовательно 2 выборки (при первом = 2, втором более 5 и при первом = 3, втором более 6).
Структура неправильная, действительно, как написал Mike. С предложенной им структурой:
ID, Объект, Машина, A, B
можно делать такие запросы:
SELECT a.object, a.mashina, a.A, a.B, b.object, b.mashina, b.A, b.B
FROM test2 AS a
JOIN test2 AS b
ON b.id != a.id AND b.object = a.object
WHERE (a.B = 2 AND b.A > 5)
OR (b.A = 2 AND a.B > 5)
OR (a.B = 3 AND b.A > 6)
OR (b.A = 3 AND a.B > 6)
UPD. теперь все условия в одном запросе.
Вариант, предложенный Mike:
select X.object, X.machine, Y.machine, C,
case when (X.A=C and Y.B > D) then Y.B else Y.A end
from test2 X, test2 Y,
(select 2 C, 5 D union all select 3, 6) Z
where X.object=Y.object and X.machine!=Y.machine
and ( (X.A=C and Y.B > D) or (X.B=C and Y.A > D) )
Работает так: берутся 2 таблицы, к ним добавляются поля С и D для каждой строчки. вот так:
То есть каждая строчка дублируется. И потом уже из этой выборки получается нужный результат.
Вк при получение token'a с разрешением wall делает редирект на страницу типа
Пишу проект, в котором серверная часть на PHP запускается в режиме демона, те