Xpoint
   [напомнить пароль]

Выборка с из трех таблиц по списку id

Метки: [без меток]
2009-07-29 20:05:18 [обр] Владимир[досье]

Имеем 3 таблицы
t1, t2, t3
в каждой есть поле id и все связаны через это поле
у меня есть список id полученных от sphinx
Как мне выбрать инфу из всех трех таблиц за один запрос?

Пробовал так

SELECT t1.*, t2.*, t3.*
FROM t1, t2, t3
WHERE t1.id=t2.id AND t1.id=t3.id
AND t1.id IN (бла, бла, бла)

результат ноль строк.

спустя 5 часов [обр] Dennis F. Latypoff aka funky_dennis(0/84)[досье]
попробуйте так:
SELECT `t1`.*, `t2`.*, `t3`.*
  FROM `table1` AS `t1`
  LEFT JOIN `table2` AS `t2` ON `t2`.`id` = `t1`.`id`
  LEFT JOIN `table3` AS `t3` ON `t3`.`id` = `t1`.`id`
 WHERE `t1`.`id` IN ('бла', 'бла', 'бла')
спустя 8 часов [обр] Владимир[досье]

Спасибо за подсказку. Видимо вчера был не в себе :)

Для меня заработал вот такой вариант:

SELECT t2.*, t3.*, t4.* FROM (
   SELECT id FROM descriptions
   WHERE id IN (
11869, 11425, 11675, 11899, 11582, 11134, 12321, 11941, 11376, 11801, 11996, 12098, 11900, 11305, 11676, 11939, 10782, 11522, 11503, 11450, 11989, 11045, 12097, 11444, 11969, 11363, 10747, 11153, 11449, 11816, 12112, 12044, 11524, 11819, 11773, 11632, 10903, 11233, 11262, 11122, 11992, 11267, 11532, 11266, 11917, 12231, 11515, 11519, 11714, 12296, 11538, 11608, 12051, 12049, 11880, 11167, 11211, 12062, 12095, 11793, 11259, 11030, 10987, 12127, 12182, 12162, 11954, 11985, 11965, 11100, 12234, 11550, 12331, 11712, 11340, 12024, 11177, 11232, 11748, 11977, 11951, 11674, 12338, 11323, 11919, 10867, 11927, 11990, 12219, 11142, 12149, 12094, 11247, 10786, 11811, 12201, 11031, 11708, 11302, 11342)
   ORDER BY FIELD(id, 11869, 11425, 11675, 11899, 11582, 11134, 12321, 11941, 11376, 11801, 11996, 12098, 11900, 11305, 11676, 11939, 10782, 11522, 11503, 11450, 11989, 11045, 12097, 11444, 11969, 11363, 10747, 11153, 11449, 11816, 12112, 12044, 11524, 11819, 11773, 11632, 10903, 11233, 11262, 11122, 11992, 11267, 11532, 11266, 11917, 12231, 11515, 11519, 11714, 12296, 11538, 11608, 12051, 12049, 11880, 11167, 11211, 12062, 12095, 11793, 11259, 11030, 10987, 12127, 12182, 12162, 11954, 11985, 11965, 11100, 12234, 11550, 12331, 11712, 11340, 12024, 11177, 11232, 11748, 11977, 11951, 11674, 12338, 11323, 11919, 10867, 11927, 11990, 12219, 11142, 12149, 12094, 11247, 10786, 11811, 12201, 11031, 11708, 11302, 11342)
   ) as t1
LEFT JOIN items as t2    ON t1.id = t2.id
LEFT JOIN descriptions as t3   ON t1.id = t3.id
LEFT JOIN dynamic as t4      ON t1.id = t4.id

Извращение, конечно, но работает.

спустя 2 дня 3 часа [обр] Алексей В. Иванов(2/2861)[досье]
Не используйте IN — на эту функцию не распространяется индексация. MySQL будет сканировать всю таблицу — для больших таблиц это может быть неприемлимым.
спустя 1 день 19 часов [обр] Владимир[досье]
Здесь ключи первичные, соотв. перегрузка будет только на сортировку. Но 50-150 результатов MySQl отсортирует сильно быстрей чем PHP.
спустя 7 дней [обр] Владимир Хоменко(2/67)[досье]
Алексей В. Иванов[досье]А где, собственно, написано об этом? Я только что выполнил explain для запроса с IN, и MySQL выдал, что ключ используется.
спустя 19 дней [обр] Алексей В. Иванов(2/2861)[досье]
Хм, не помню. Может, это уже и неактуально :)
Powered by POEM™ Engine Copyright © 2002-2005