Автор Тема: запрос с двумя таблицами  (Прочитано 5726 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн strakhov

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с двумя таблицами
« : 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\' ";

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
запрос с двумя таблицами
« Ответ #1 : 24 Декабря 2008, 14:09:19 »
С ходу скажу: попробуй без JOIN, просто SELECT FROM tbl1, tbl2.

Оффлайн strakhov

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с двумя таблицами
« Ответ #2 : 24 Декабря 2008, 14:13:13 »
так?

$Query = "SELECT *  FROM tblorderheaders,tbldocs where tblorderheaders.lngOrderID=tbldocs.lngDocNum and tbldocs.lngDocType=\'1\' and tbldocs.lndIdTipDocs=\'2\' ";


тоже выводит весь список. не смотрит на условия отбора.

Оффлайн strakhov

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с двумя таблицами
« Ответ #3 : 24 Декабря 2008, 14:28:09 »
Если вывести в два 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];}

}
« Последнее редактирование: 24 Декабря 2008, 16:03:04 от strakhov »

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
запрос с двумя таблицами
« Ответ #4 : 24 Декабря 2008, 14:30:21 »
Должно работать палюбому.

Оффлайн strakhov

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с двумя таблицами
« Ответ #5 : 24 Декабря 2008, 14:54:11 »
изменил работающий запрос из двух SELECT сверху.

понял в чем дело, задача усложняется тем что в таблице tbldocs всегда есть записи где lngDocType равен \'1\' поэтому выводит все записи, приходится брать последнюю запись из tbldocs и сравнивать равно ли lngDocType=\'1\' поскольку есть записи которые имееют lngDocType другие значения кроме 1

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
запрос с двумя таблицами
« Ответ #6 : 24 Декабря 2008, 15:47:41 »
что-то я ниче не понял.

Оффлайн strakhov

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с двумя таблицами
« Ответ #7 : 24 Декабря 2008, 16:02:06 »
в таблице 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

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
запрос с двумя таблицами
« Ответ #8 : 24 Декабря 2008, 16:35:14 »
у меня все работает отлично
тестовые таблицы:


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;

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28