SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.02.2009 19:28:45

DarveL
Участник
Зарегистрирован: 14.02.2009
Сообщений: 7

Выборка из одной таблицы+условия из 2 других

Нужно выбрать из таблицы table3 поле id.
Такие условия:
table3: file<>'' AND `status`=1 AND `onoff`=1
table2: `status`=1 AND `ban`=0 AND `onoff`=1
table1: `ban`=0 AND `kr`>0 AND `onoff`=1
Общее условие: id.table1=id_t1.table2=id_t1.table3

Вот таблицы

CREATE TABLE `table1` (
`id` int(11) NOT NULL auto_increment,
`onoff` int(1) NOT NULL default '0',
`kr` float(15) NOT NULL default '0',
`ban` int(2) NOT NULL default '0',
PRIMARY KEY (`id`)
)


CREATE TABLE `table2` (
`id` int(15) NOT NULL auto_increment,
`id_t1` int(11) default '0',
`onoff` int(2) NOT NULL default '0',
`ban` int(2) NOT NULL default '0',
`status` int(2) default '0',
PRIMARY KEY (`id`)
)

CREATE TABLE `table3` (
`id` int(20) NOT NULL auto_increment,
`id_t1` int(11) default '0',
`id_t2` int(15) default '0',
`file` varchar(100) default '',
`status` int(1) default '0',
`onoff` int(1) NOT NULL default '1',
PRIMARY KEY (`id`)
)

Еще чуть не забыл значение ид должно быть случайно из table3

Вот мои попытки
$res=mysql_result(mysql_query("SELECT a.`id`
FROM `table3` a
JOIN `table2` b ON b.`onoff` =1 AND b.`status`=1 AND b.`ban` =0
JOIN `table1` c ON c.`ban` =0 AND c.`kr`>10 AND c.`onoff` =1
WHERE a.`file`<>'' AND a.`status`=1 AND a.`onoff` =1
ORDER BY RAND( )
LIMIT 1"),0);

Неактивен

 

#2 14.02.2009 19:39:31

DarveL
Участник
Зарегистрирован: 14.02.2009
Сообщений: 7

Re: Выборка из одной таблицы+условия из 2 других

Мой запрос не всегда выполняет поставленные  условия.
То есть выдает результат абсолютно рандомно.

Неактивен

 

#3 14.02.2009 19:48:37

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Выборка из одной таблицы+условия из 2 других

После ключевого слова "ON" должно следовать условие объединения таблиц

DarveL написал:

Общее условие: id.table1=id_t1.table2=id_t1.table3

, а не условия выборки.

Код:

SELECT a.`id`
FROM `table1` c
JOIN `table2` b ON b.id_t1=c.id
JOIN `table3` a ON a.id_t1=c.id
WHERE
a.`file`<>'' AND a.`status`=1 AND a.`onoff` =1
AND b.`onoff` =1 AND b.`status`=1 AND b.`ban` =0
AND c.`ban` =0 AND c.`kr`>10 AND c.`onoff` =1
ORDER BY RAND()
LIMIT 1

Отредактированно coin (14.02.2009 19:52:31)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson