JOIN сравнить поля с условием

deepweb

Новичок
JOIN сравнить поля с условием

Вопрос таков. Есть две таблицы table1 и table2 пример.

Таблица table1 поля id, ides, name
Таблица table2 поля id, ides, status

Цель.

Выбрать данные из таблице table1 с условием, что поле status в таблице table2 равное 1
связь между таблицами по полю idres (table1 idres равно полю idres table2 при этом отфильтровать status = 1)
Как я понимаю это можно организовать с помощью JOIN только вот интересно будет ли это оптимальным решением по скорости и
какие варианты запроса могут ещё быть в данном случаи по возможности с примерами
 

sage

Новичок
[SQL]
SELECT `table1`.*
FROM `table1`, `table2`
WHERE `table1`.`idres` = `table2`.`idres` AND `table2`.`status` = 1
[/SQL]
 

akd

dive now, work later
Команда форума
sage, это тот-же join, только в профиль. :)

deepweb, а ты уже написал хоть один вариант и тебя не устроила скорость?
 

Wicked

Новичок
Как я понимаю это можно организовать с помощью JOIN только вот интересно будет ли это оптимальным решением по скорости
Будет. Если не устраивает скорость - читаем про индексы и explain-запрос.
 

deepweb

Новичок
В таблице 8 000 000 записей. Скорость =)

SELECT * FROM table1, table2 WHERE name LIKE "что тут не важно" and table1.idres = table2.idres and table2.status = 1

что мне подсказывает условие не коректно, а порядок важен.
 

akd

dive now, work later
Команда форума
deepweb, что-то мне подсказывает, что используя LIKE на 8 млн. записей о скорости даже мечтать не стоит :)
 

partizan

Новичок
Можно еще так попробовать, в некоторых ситуациях может работать быстрее:

PHP:
SELECT * FROM  table1
WHERE exists 
(
 SELECT * FROM table2 WHERE
 table1.idres = table2.idres and table2.status = 1
)
 

Wicked

Новичок
8000000, конечно, внушительная цифра, но не сверхестественная.

name LIKE "что тут не важно"
очень даже важно. От вида wildcard-а зависит, будут ли использоваться индексы.

Также хотелось бы узнать _смысл_ и типы полей id, id[r]es, name и статус. И расскажи, зачем эти таблицы нужны, и зачем тебе понадобился такой джоин. Без этих знаний оптимизировать сложно (например, я бы подумал над переносом поля статус из table2 в table1, но не знаю, насколько это уместно).
 

deepweb

Новичок
И так по порядку есть скрипт поиска по FTP
http://www.ftpsearch.deepweb.spb.ru/

Таблица 1
PHP:
CREATE TABLE `files` (
  `IDFile` int(11) NOT NULL auto_increment,
  `IDResource` int(11) NOT NULL default '0',
  `FileName` varchar(255) NOT NULL default '',
  `URLPath` varchar(255) NOT NULL default '',
  `IsDirectory` tinyint(4) NOT NULL default '0',
  `IDParentDir` int(11) default NULL,
  `FileSize` bigint(20) default NULL,
  `eff_d` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `counter` varchar(200) NOT NULL default '0',
  PRIMARY KEY  (`IDFile`),
  KEY `ResourceAndParent` (`IDResource`,`IDParentDir`),
  KEY `FileName` (`FileName`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2763095 ;
Таблица 2
PHP:
CREATE TABLE `resources` (
  `IDResource` int(11) NOT NULL auto_increment,
  `IPAddr` varchar(255) NOT NULL default '',
  `Path` varchar(255) default NULL,
  `Login` varchar(255) default NULL,
  `Password` varchar(255) default NULL,
  `Description` text,
  `FailedAttempts` int(11) default NULL,
  `TotalFiles` int(11) default NULL,
  `TotalSize` bigint(20) default NULL,
  `ConnectsOk` int(11) default NULL,
  `ConnectsFailed` int(11) default NULL,
  `LastAttemptOk` tinyint(4) default NULL,
  `AltIP` varchar(255) default NULL,
  `port` varchar(4) NOT NULL default '21',
  `status` char(1) NOT NULL default '0',
  PRIMARY KEY  (`IDResource`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=227 ;
Для поиска используется запрос.
PHP:
$re = query("SELECT IDFile, FileName, URLPath, IsDirectory, FileSize, IDParentDir, Files.IDResource AS IDResource, eff_d FROM Files WHERE FileName LIKE \"".ftpsearch_escape_string($search_str."%")."\" ORDER BY eff_d DESC LIMIT $of, $st");
Цель дополнить грамотно запрос.
Что в результате он выводил результат поиска сусловием что status для опеределнного сервера = 1 тоесть включен.

Ну а так же советы по оптимизации запроса.

-~{}~ 11.08.06 23:26:

Вопрос я конешно решил но интересно на сколько оптимально. просто подключать 2 таблицу или сделать на join
 
Сверху