Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сравнение и извлечение по дувум полям
 
 автор: Ильдар   (25.04.2008 в 01:01)   письмо автору
 
 

Имеются две таблицы:
contract - которая находиться в базе bill1
и таблица predup которая находить в базе bill2.
Мне нужно сделать так: вывести из таблицы contract все строки кроме строк, где содержание поля id совпадает с полем ab_id в таблице predup.
P.S. - с таблице contract 3,139 строк

Делаю запрос:
SELECT `contract`.`id` AS `id` FROM `contract`, `bill`.`predup` WHERE `contract`.`id` != `bill2`.`predup`.`ab_id`

после выполнения запроса, мне выводит 9,414 строк.
Как я понимаю цикл проверки проходит 3 раза, потому что у меня в таблице predup 3 строки, и по окончанию каждого цикла, мне выводит все строки которые не содержат значения поля ab_id из таблицы predup

-----------------
contract:
CREATE TABLE IF NOT EXISTS `contract` (
`id` int(10) unsigned NOT NULL auto_increment,
`comment` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ;

-----------------
predup:

CREATE TABLE IF NOT EXISTS `predup` (
`id_pred` int(99) NOT NULL auto_increment,
`ab_id` int(99) NOT NULL default '0',
`data` int(20) NOT NULL default '0',
`data2` int(20) NOT NULL default '0',
`data3` int(20) NOT NULL default '0',
PRIMARY KEY (`id_pred`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ;

   
 
 автор: Axxil   (25.04.2008 в 10:56)   письмо автору
 
   для: Ильдар   (25.04.2008 в 01:01)
 

Используйте JOIN для работы с множествами

Отличную. визуалицию различных видов объединения таблиц можно найти здесь:

http://www.codinghorror.com/blog/archives/000976.html

   
 
 автор: Ильдар   (25.04.2008 в 11:04)   письмо автору
 
   для: Axxil   (25.04.2008 в 10:56)
 

Вот уже несколько часов копаюсь по мануалу на сайте майскула, я примерно начал приходить к тому что нужно использовать JOIN.
Как я понимаю JOIN может работать с массивом?
Ведь у меня при одном цикле запроса одна переменная сравнивается с массивом переменных

   
 
 автор: Axxil   (25.04.2008 в 11:32)   письмо автору
 
   для: Ильдар   (25.04.2008 в 11:04)
 

Массив - это частный случай понятия множества.

JOIN объединяет таблицы БД.

В вашем случае, если я правильно понял условия, подойдёт такое исключающее объединение:

SELECT contract.id AS id FROM contract
LEFT JOIN bill2.predup ON contract.id = bill2.predup.ab_id
WHERE bill2.predup.ab_id is NULL

   
 
 автор: Ильдар   (25.04.2008 в 11:39)   письмо автору
 
   для: Axxil   (25.04.2008 в 11:32)
 

Аааа, получилось!
Спасибо тебе огромное Axxil

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования