За последние 24 часа нас посетили 18846 программистов и 1630 роботов. Сейчас ищут 947 программистов ...

Выборка разных полей из разных таблиц с сортировкой

Тема в разделе "MySQL", создана пользователем Shadez, 10 июн 2010.

  1. Shadez

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

    С нами с:
    2 июн 2009
    Сообщения:
    9
    Симпатии:
    0
    Доброго времени суток.
    Имеется 2 таблицы, в них хранятся некие записи с датой добавления (unix timestamp):
    table1:

    [​IMG]

    table2:

    [​IMG]

    Нужно выбрать `table1`.`achievement`, `table1`.`date`, `table2`.`criteria`, `table2`.`date` и выполнить сортировку по обоим полям `date`. Т.е., результат должен быть примерно таким:

    [​IMG]
    Если данные были взяты из таблицы 1, поле criteria имеет значение 0, если же взяты из 2й, то поле achievement имеет нулевое значение.
    Пробовал с left join, union, нужного результата не получил.
    Приму любую помощь.
    Заранее спасибо.
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    А почему с union не получилось?
     
  3. Shadez

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

    С нами с:
    2 июн 2009
    Сообщения:
    9
    Симпатии:
    0
    Запрос:
    Код (Text):
    1. (
    2. SELECT `achievement` , `date` AS `achDate`
    3. FROM `character_achievement`
    4. WHERE `guid` =7
    5. ORDER BY `date` DESC
    6. )
    7. UNION (
    8.  
    9. SELECT `criteria` , `date` AS `crDate`
    10. FROM `character_achievement_progress`
    11. WHERE `guid` =7
    12. ORDER BY `date` DESC
    13. )
    Результат:
    [​IMG]
    Поле criteria в результат не попадает. Чувствую, что что-то не так делаю :(
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Если achievement и criteria одного типа, то criteria попадает в выборку, но находится в том же столбце что и achievement.
    Сделайте 3 столбца выборки.

    И Вам упорядочить по дате надо все или каждую таблицу отдельно?
     
  5. Shadez

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

    С нами с:
    2 июн 2009
    Сообщения:
    9
    Симпатии:
    0
    Догадывался насчет этого, но есть проблема - критерии и ачивменты должны обрабатываться впоследствии по-разному, а распознать что есть что будет очень сложно.
    Не совсем понял)

    Упорядочить конечный результат.

    PS: вот с таким запросом:
    Код (Text):
    1. SELECT `character_achievement`.`achievement` , `character_achievement`.`date` , `character_achievement_progress`.`criteria` , `character_achievement_progress`.`date`
    2. FROM `character_achievement` AS `character_achievement`
    3. LEFT JOIN `character_achievement_progress` AS `character_achievement_progress` ON `character_achievement_progress`.`guid` = `character_achievement`.`guid`
    4. WHERE `character_achievement`.`guid` =7
    5. ORDER BY `character_achievement`.`date` , `character_achievement_progress`.`date`
    6. LIMIT 50
    Выбирается всё в разные столбцы, но всё равно криво:
    [​IMG]
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1)Что есть union?
    Грубо говоря: "Прилепи мне вот к этой таблице вот эту таблицу снизу. Столбцы обзови по первой таблице".
    Итого:
    [sql]SELECT `achievement` , 0 as criteria `date`
    FROM `character_achievement`
    WHERE `guid` =7

    union[/sql]
    дальше выборка из второй таблицы.

    2)Посмотрите как используется order by при union.