Выбор из таблицы MySQL при заказе по идентификаторам из другой таблицы

Это может быть что-то очень простое. Если так, прошу прощения. Я все еще изучаю MySQL.

Скажем, у меня есть две таблицы:

Table1:
`id` int autoincrement primary key
`Name` tinytext
`Phone` tinytext
`Date` etc.

а также

Table2:
`id` int autoincrement primary key
`itmID` int

Каждая строка в Table2 определяет порядок, в котором элементы должны быть выбраны из Table1. Поле itmID в таблице 2 связано с полем id в таблице 1.

Итак, прямо сейчас, чтобы выбрать элементы из Table1, я делаю следующее:

SELECT * FROM `Table1`;

Но как их упорядочить по Таблице 2, примерно так?

SELECT * FROM `Table1` ORDER BY <itmID's in Table2> ASC;

person ahmd0    schedule 04.08.2011    source источник


Ответы (4)


Если все идентификаторы Table1 имеют запись на Table2, используйте INNER JOIN, как это.

SELECT * FROM Table1 t1
INNER JOIN Table2 t2 ON t1.id = t2.itmID
ORDER BY t2.itmID

Если не все из них имеют запись, используйте LEFT JOIN, например:

SELECT * FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.itmID
ORDER BY t2.itmID
person Shef    schedule 04.08.2011
comment
Очень хороший комментарий. Спасибо! - person ahmd0; 05.08.2011

Выберите из первой таблицы, присоедините ее ко второй и отсортируйте по второй. Что-то вроде

SELECT * 
FROM   table1
LEFT JOIN table 2 on table.id = table2.id
ORDER by table2.itmID
person Ryan    schedule 04.08.2011
comment
Идея правильная, но я сомневаюсь, что id - подходящий столбец соединения, если это автоинкремент в обеих таблицах. - person Joe Stefanelli; 04.08.2011
comment
Хороший момент - присоединяйтесь к тому, что подходит для данных. Если две таблицы нельзя соединить, вы не сможете отсортировать их таким образом. - person Ryan; 04.08.2011

Ответ Райана почти правильный

SELECT *
FROM table1
INNER JOIN table2 on table1.id = table2.itmID
ORDER BY table2.id
person feathj    schedule 04.08.2011

http://dev.mysql.com/doc/refman/5.5/en/join.html

SELECT * FROM `Table1`
INNER JOIN `Table2` USING (`id`)
ORDER BY `Table2`.`itmID` ASC
person Timur    schedule 04.08.2011