Forum Webscript.Ru
Общие => Базы данных => Тема начата: strakhov от 24 Декабря 2008, 14:06:54
-
есть две таблицы
первая "tblorderheaders"
lngOrderID(номер заказа уникальный)|....|
вторая "tbldocs"
...|lngDocType(тип документа)|lngDocNum(номер заказа)|lndIdTipDocs|..
во вторую таблицу пишутся множество записей с номерами заказов lngDocNum(номер заказа) (может быть много записей с одинаковым lngDocNum(номер заказа)) но с разными lngDocType(тип документа).
надо вывести данные из tblorderheaders с теми записями у которых одинаковый lngOrderID=lngDocNum и lngDocType=\'1\' и lndIdTipDocs=\'2\'
Мой запрос выводит все записи из tblorderheaders, т.е никак не реагирует на условия отбора
$Query = "SELECT * FROM tblorderheaders LEFT JOIN tbldocs ON tblorderheaders.lngOrderID=tbldocs.lngDocNum where tbldocs.lngDocType=\'1\' and tbldocs.lndIdTipDocs=\'2\' ";
-
С ходу скажу: попробуй без JOIN, просто SELECT FROM tbl1, tbl2.
-
так?
$Query = "SELECT * FROM tblorderheaders,tbldocs where tblorderheaders.lngOrderID=tbldocs.lngDocNum and tbldocs.lngDocType=\'1\' and tbldocs.lndIdTipDocs=\'2\' ";
тоже выводит весь список. не смотрит на условия отбора.
-
Если вывести в два SELECT так оно работает но он ходит по всей таблице tblorderheaders в цикле, а хотелось бы чтобы выбирались только нужные записи в одном совмещенном SELECT
$Query = "SELECT * FROM tblorderheaders\'";
$result = mysql_db_query ($dbname, $Query, $Link);
while ($Row = mysql_fetch_array ($result)) {
$Query6 = "SELECT * FROM tbldocs where lndIdTipDocs=\'2\' and lngDocNum=\'$Row[lngDocNum]\' order by lngDocID desc limit 1";
$result6 = mysql_db_query ($dbname, $Query6, $Link);
$Row6 = mysql_fetch_array ($result6);
if ($Row6[lngDocType]==\'1\') {echo $Row[lngDocNum];}
}
-
Должно работать палюбому.
-
изменил работающий запрос из двух SELECT сверху.
понял в чем дело, задача усложняется тем что в таблице tbldocs всегда есть записи где lngDocType равен \'1\' поэтому выводит все записи, приходится брать последнюю запись из tbldocs и сравнивать равно ли lngDocType=\'1\' поскольку есть записи которые имееют lngDocType другие значения кроме 1
-
что-то я ниче не понял.
-
в таблице tbldocs есть такие записи к примеру
id|lngDocType|lngDocNum|lndIdTipDocs
2|13 |1 |2
3|1 |1 |2
4|15 |1 |2
7|1 |4 |2
8|13 |6 |2
в таблице tblorderheaders такие
lngDocNum|....||||
1 |....||||
4 |....||||
6 |....||||
....
надо вывести записи из табл tblorderheaders только те у которых в таблице tbldocs последний lngDocType=\'1\'
тоесть он должен вывести только одну запись с номером lngDocNum=4
-
у меня все работает отлично
тестовые таблицы:
CREATE TABLE `t1` (
`id` int(11) unsigned NOT NULL auto_increment,
`type` int(11) unsigned NOT NULL,
`t2id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `t1` (`id`, `type`, `t2id`) VALUES
(1,1,1),
(2,2,1),
(3,3,1),
(4,1,2),
(5,2,3),
(6,1,3),
(7,3,4),
(8,4,5),
(9,1,5);
CREATE TABLE `t2` (
`id` int(11) unsigned NOT NULL auto_increment,
`xxx` char(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `t2` (`id`, `xxx`) VALUES
(1,\'c1\'),
(2,\'c2\'),
(3,\'c3\'),
(4,\'c4\'),
(5,\'c5\'),
(6,\'c6\');
Запрос:
SELECT `t2`.* FROM `t1`, `t2` WHERE `t2`.`id` = `t1`.`t2id` AND `t1`.`type` = 1;