За последние 24 часа нас посетили 23532 программиста и 1687 роботов. Сейчас ищут 1859 программистов ...

Запрос из двух таблиц, как объеденить?

Тема в разделе "MySQL", создана пользователем Sergey999, 28 дек 2011.

  1. Sergey999

    Sergey999 Активный пользователь

    С нами с:
    28 дек 2011
    Сообщения:
    9
    Симпатии:
    0
    В общем то пытался сделать через UNION, JOIN или просто "FROM tbl1,tbl2"... Но все не то, у меня есть две таблицы "Запчасти" и "Машины" в каждой просто объявления пользователей о продаже/покупке...

    Мне нужно сделать запрос вида:
    SELECT * FROM tbl WHERE manuf = '1' ORDER BY dt_add LIMIT 0,10

    Так чтобы работали ORDER BY и LIMIT, то есть так как будто бы таблица "tbl" одна, а не две... tbl1 и tbl2
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Если как будто бы таблица одна - то тут UNION. Чтобы он работал - нужно, чтобы первый и второй запросы возвращали одинаковое количество столбцов. Например:

    [sql]SELECT `id`, `name`, `dt_add` FROM `table1` WHERE `manuf` = 1
    UNION
    SELECT `id`, `name`, `dt_add` FROM `table2` WHERE `manuf` = 1
    ORDER BY `dt_add` LIMIT 0, 10;[/sql]
     
  3. Sergey999

    Sergey999 Активный пользователь

    С нами с:
    28 дек 2011
    Сообщения:
    9
    Симпатии:
    0
    Спасибо, но вот этого они не могут(( таблицы немного отличаются 70% совпадают и в остальном пошли отличия... Правда я вообще координально решил проблему и запросы все просто отпали =)))
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Можно заставить UNION и на разных таблицах работать. Я же не говорю, что таблицы должны быть одинаковые. Я говорю, что подзапросы должны возвращать соответствующие столбцы. Ну вот, например, есть две таблицы:

    Код (Text):
    1. mysql> SELECT * FROM `t1`;
    2. +----+--------+------------+----------------+-------+
    3. | id | name   | dt_add     | some_content   | manuf |
    4. +----+--------+------------+----------------+-------+
    5. |  1 | first  | 2011-01-01 | first_content  |     1 |
    6. |  2 | second | 2011-02-02 | second_content |     1 |
    7. +----+--------+------------+----------------+-------+
    8.  
    9. mysql> SELECT * FROM `t2`;
    10. +----+-----------+------------+----------------+---------+-------+
    11. | id | title     | add_date   | contents       | user_id | manuf |
    12. +----+-----------+------------+----------------+---------+-------+
    13. |  1 | t2_first  | 2011-03-03 | first_content  |      15 |     1 |
    14. |  2 | t2_second | 2011-04-04 | second_content |      27 |     1 |
    15. |  3 | t2_third  | 2011-05-05 | third_content  |       8 |     1 |
    16. +----+-----------+------------+----------------+---------+-------+
    Тогда:
    [sql]SELECT `id`, `name`, `dt_add`, NULL, 't1' FROM `t1` WHERE `manuf` = 1
    UNION
    SELECT `id`, `title`, `add_date`, `user_id`, 't2' FROM `t2` WHERE `manuf` = 1
    ORDER BY `dt_add` LIMIT 0, 10;[/sql]

    Код (Text):
    1. mysql> SELECT `id`, `name`, `dt_add`, NULL, 't1' FROM `t1` WHERE `manuf` = 1
    2. UNION
    3. SELECT `id`, `title`, `add_date`, `user_id`, 't2' FROM `t2` WHERE `manuf` = 1
    4. ORDER BY `dt_add` LIMIT 0, 10;
    5. +----+-----------+------------+------+----+
    6. | id | name      | dt_add     | NULL | t1 |
    7. +----+-----------+------------+------+----+
    8. |  1 | first     | 2011-01-01 | NULL | t1 |
    9. |  3 | t2_third  | 2011-02-02 |    8 | t2 |
    10. |  1 | t2_first  | 2011-03-03 |   15 | t2 |
    11. |  2 | t2_second | 2011-04-04 |   27 | t2 |
    12. |  2 | second    | 2011-05-05 | NULL | t1 |
    13. +----+-----------+------------+------+----+
    14. 5 rows in set