|
|
|
| требуется сравнить 6 полей одной таблицы с 1 полем другой
имеется таблица oldtelephones
поля
id
cellular1
cellular2
cellular3
stationary1
stationary2
stationary3
выделенные поля жирным их надо сравнить с таблицой personal с полем telephone
все совпадения вывести с сортировкой по дате ORDER BY date DESC
как лучше все это реализовать не пойму.. | |
|
|
|
|
автор: ........ (10.08.2009 в 20:51) |
|
|
для: t3ma
(10.08.2009 в 20:15)
| | >ORDER BY date DESC
где date ? что вывести ?
SELECT * FROM oldtelephones WHERE x IN {cellular1, cellular2, cellular3, stationary1, stationary2, stationary3) | |
|
|
|
|
автор: ...... (10.08.2009 в 21:11) |
|
|
для: t3ma
(10.08.2009 в 20:15)
| |
SELECT * FROM `x_values` WHERE EXISTS (SELECT * FROM oldtelephones WHERE x_values.x IN {cellular1, cellular2, cellular3, stationary1, stationary2, stationary3))
ORDER BY `date` DESC
| или такое или подзапрос чуть сложнее
непроверял | |
|
|
|
|
|
|
|
для: ......
(10.08.2009 в 21:11)
| |
CREATE TABLE IF NOT EXISTS `oldtelephones` (
`id` int(11) NOT NULL,
`cellular1` varchar(10) NOT NULL,
`cellular2` varchar(10) NOT NULL,
`cellular3` varchar(10) NOT NULL,
`stationary1` varchar(20) NOT NULL,
`stationary2` varchar(20) NOT NULL,
`stationary3` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
--
-- Структура таблицы `personal`
--
CREATE TABLE IF NOT EXISTS `personal` (
`id` int(11) NOT NULL auto_increment,
`date` datetime NOT NULL,
`from_id` varchar(20) NOT NULL default '',
`to_id` varchar(20) NOT NULL default '',
`telephone` varchar(20) NOT NULL,
`message` varchar(1200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=39 ;
|
Надо сравнить поля cellular1, cellular2, cellular3, stationary1, stationary2, stationary3 таблицы oldtelephones с полем telephone таблицы personal и вывести все совпадения отсортированые по date таблицы personal | |
|
|
|
|
автор: ...... (10.08.2009 в 21:23) |
|
|
для: t3ma
(10.08.2009 в 21:13)
| | x_values это Personal
x_values.x это то поле которое в Personal | |
|
|
|
|
|
|
|
для: ......
(10.08.2009 в 21:23)
| |
SELECT * FROM `personal` WHERE EXISTS (SELECT * FROM oldtelephones WHERE telephone IN (cellular1, cellular2, cellular3, stationary1, stationary2, stationary3)) ORDER BY `date` DESC
|
немного неправильно работает
выводит только последнее совпадение
были совпадения
cellular1 с telephone
и
cellular2 с telephone
вывело только последнее | |
|
|
|
|
|
|
|
для: t3ma
(10.08.2009 в 21:48)
| | помогите плиз | |
|
|
|
|
|
|
|
для: t3ma
(11.08.2009 в 10:14)
| | почему неправильно работает ?
INSERT INTO `oldtelephones`
VALUES (1, '9123456781','9987654321','9111112221','122222','111111','133333'),
(2, '9123456782','9987654322','9111112222','222222','211111','233333'),
(3, '9123456783','9987654323','9111112223','322222','311111','333333'),
(4, '9123456784','9987654324','9111112224','422222','411111','433333');
INSERT INTO `personal`
VALUES
(1, NOW(),'abc','def','900000000','aaaaa'),
(2, NOW(),'abc','def','9123456781','bbbbbbbb'),
(3, NOW(),'abc2','def3','9123456783','ccccccc'),
(4, NOW(),'abc3','def','9123456783','ddddddddd'),
(5, NOW(),'abc','def','9123456789','eeeeeeeee'),
(6, NOW(),'abc5','def5','422222','ffffffffffffff'),
(7, NOW(),'abc6','def','422222','yyyyyyyyyy'),
(8, NOW(),'abc8','def7','9123456781','zzzzzzzzz');
## возвращает всё из personal где есть номера из oldtelephones
2 2009-08-11 12:19:04 abc def 9123456781 bbbbbbbb
3 2009-08-11 12:19:04 abc2 def3 9123456783 ccccccc
4 2009-08-11 12:19:04 abc3 def 9123456783 ddddddddd
6 2009-08-11 12:19:04 abc5 def5 422222 ffffffffffffff
7 2009-08-11 12:19:04 abc6 def 422222 yyyyyyyyyy
8 2009-08-11 12:19:04 abc8 def7 9123456781 zzzzzzzzz
|
| |
|
|
|
|
|
|
|
для: heed
(11.08.2009 в 12:29)
| | сорри.. мой косяк.. все нормально работает но я написал свой запрос:
select * from personal p, oldtelephones o
where o.id = 47 AND (p.telephone = o.cellular1 OR
p.telephone = o.cellular2 OR p.telephone = o.cellular3 OR
p.telephone = o.stationary1 OR p.telephone = o.stationary2 OR
p.telephone = o.stationary3) order by p.date ASC;
|
какой лучше использовать ? мой или тот который выше написал ......
или нет никакой разницы ? | |
|
|
|
|
|
|
|
для: t3ma
(11.08.2009 в 12:41)
| | это разные запросы , и они возвращают разные результаты | |
|
|
|
|
|
|
|
для: t3ma
(10.08.2009 в 20:15)
| | чем так мучиться, можно было парой-тройкой запросов это безобразие нормализовать.
До таблицы newphones(id, client_id, type, phone) | |
|
|
|
|