2013-09-26 2 views
0

Это вопрос mysql, и я даже не знаю, возможно ли это, но, как вы можете видеть ниже, у меня есть 2 таблицы. Они в основном делают то же самое с разницей. Один заплатил = 1, а другой заплатил = 0Как сравнить ту же таблицу в mysql

Так что мои головные боли, если таблица 2 имеют CardID, цена и название точно, как в таблице 1, которая включает в себя платный = 1, оно не должно будет отображаться в таблице 2. О, и сравнение может иметь место только в том случае, если создан также соответствует, + - 5 минут в порядке.

SQL Statement 1

SELECT t.cardid, ct.title, t.transactionid, FROM_UNIXTIME(t.created),t.priceafterdiscount, t.paid 
FROM transactions as t 
left join exp_channel_titles ct on t.restaurant_id = ct.entry_id 
where t.paid = 0 
and t.transactiontime > '2013-09-23' and 
t.phoneid != '123456789' and 
t.cardid != '88888888' and 
t.restaurant_id NOT in (47505) 
ORDER BY t.created DESC; 

Мой выход для Tabel 1.

Card_ID  Title    Trans_ID Created    price Paid 
10017039 Café Cici   15887 2013-09-26 11:04:49 75  0 
10017039 Café Cici   15885 2013-09-26 11:03:08 100 0 
10017039 Café Cici   15884 2013-09-26 11:02:33 15000 0 
10166152 Viet-Nam Nam  15870 2013-09-25 20:51:44 28800 0 
10030773 Restaurant Shezan 15866 2013-09-25 20:10:35 38175 0 
10030773 Restaurant Shezan 15865 2013-09-25 20:09:41 50900 0 
10030773 Restaurant Shezan 15864 2013-09-25 20:08:13 38175 0 

SQL Statement 2

SELECT t.cardid, ct.title, t.transactionid, FROM_UNIXTIME(t.created), t.priceafterdiscount, t.paid 
FROM transactions as t 
left join exp_channel_titles ct on t.restaurant_id = ct.entry_id 
where t.paid = 1 
and t.transactiontime > '2013-09-23' and 
t.phoneid != '123456789' and 
t.cardid != '88888888' and 
t.restaurant_id NOT in (47505) 
ORDER BY t.created DESC 

Мой выход для Tabel 2.

Card_ID  Title    Trans_ID Created    price Paid 
10171120 Hjørnet    15889 2013-09-26 11:18:47 6750 1 
10017039 Café Cici   15888 2013-09-26 11:06:24 75  1 
10017039 Café Cici   15886 2013-09-26 11:04:14 75  1 
10129289 Café ZugarBaby  15876 2013-09-25 21:44:34 15000 1 
10082903 Café Katz   15862 2013-09-25 19:40:26 19040 1 
10064767 Restaurant Fønix 15857 2013-09-25 17:58:53 14250 1 
+0

_ «Они в основном делают то же самое с разницей. Один заплатил = 1, а другой заплатил = 0 "_ - почему, а почему? Почему это не _one_ table, у которой есть оплачиваемый статус 0 или 1 для каждой записи? – CBroe

+0

Они находятся в одной таблице, что видно на имени (трансакции) таблицы. Существует 2 sql-оператора, потому что они запускаются на каждой странице html. – Zaz

ответ

0

выберите * из таблицы 1, где строка не в таблице 2 ваших условия:

select * from 
table1 
left join table2 
on table1.cardid=table2.cardid 
and table1.price=table2.price 
and table1.title=table2.title and 
timestampdiff(minute,table1.created, table2.created) between -5 and 5 

where table2.cardid is null 

в качестве альтернативы, вы можете объединение всех ваши два запроса, группа по CardID, цена, названию, и добавить условие, имеющее количество (*) = 1 и платный = 0, но он не будет работать с условием 5minute timestamp

+0

Однако в таблице 1 и таблице 2 (которая является той же таблицей) содержится плавающее поле, здесь она является переменной, начиная от 0-1. Я просто разделил таблицу на две части. Так что запрос содержит один платный = 0, где и другой содержит платный = 1, где – Zaz

+0

да. table1 имеет платные = 0 записей, table2 имеет платные = 1 запись. запрос выше должен работать так, как вам хотелось, возвращать платный = 0, который не найден в таблице с платной = 1 – AdrianBR

+0

Извините, но это не сработало – Zaz

Смежные вопросы