2013-02-11 4 views
2

В основном в этом веб-приложении у меня есть модуль событий, в котором пользователь может создавать, редактировать и удалять событие, также может загружать фотографию для этого события. Другие пользователи могут участвовать в определенном событии, выбирая кнопку I'm in или просто указывая событие Sound's Cool. На данный момент есть 3 таблица event_photo (рис загрузок пользователя будет сохранен здесь), event_in и event_cool, теперь я нужен фид активности события, для этого мне нужно, чтобы объединить все 3 таблицы, группируя их как photo, in и cool. Поэтому мне нужно спросить, следует ли создавать одну таблицу для перечисления этих действий или я должен объединить все результаты в php. Раньше я объединял все 2 результата в одну таблицу, но теперь хочу попробовать что-то другое. Есть таблица структуры.Mysql Php, объединяющий 3 таблицы

event_photo стол

id  photo_url  business_id  event_id   user_id caption added_date 
1   1111    12    2    3  test1  20130209t1 
2   1122    13    3    4  test2  20130209t4 
3   1133    14    2    3  test3  20130209t2 

event_in стол

id event_id user_id date_created 
1   2    3  20130209t3 

event_cool

id event_id user_id date_created 
1   2    4  20130209t5 
2   3    3  20130209t6 

Теперь корм будет выглядеть следующим образом, на основе date_created desct6 -> t1

User_3 says cool for Event_3 
User_4 says cool for Event_2 
User_4 added photo for Event_3 
User_3 added photo for Event_2 
User_3 attending Event_2 
User_3 added photo for Event_2 
User_3 added photo for Event_2 

Теперь, как таблица должна быть дизайн, я надеюсь, что это важные вопросы, так как это может решить многие проблемы, касающиеся деятельности feed.Thanks

ответ

1

Опцион будет иметь свои три таблицы и запросы к ним что-то похожее на:

SELECT * 
    FROM 
     (SELECT user_id, 
        event_id, 
        date_added as date_created, 
        'photo' as type 
      FROM event_photo 
      UNION 
      SELECT user_id, 
        event_id, 
        date_created, 
        'event_in' as type 
      FROM event_in 
      UNION 
      SELECT user_id, 
        event_id, 
        date_created, 
        'event_cool' as type 
      FROM event_cool 
     ) s 
    ORDER BY date_created 

Чтобы упростить код, вы можете создать вид:

CREATE OR REPLACE VIEW v_ordered_actions AS 
    SELECT * 
    FROM 
     (SELECT user_id, 
        event_id, 
        date_added as date_created, 
        'photo' as type 
      FROM event_photo 
      UNION 
      SELECT user_id, 
        event_id, 
        date_created, 
        'event_in' as type 
      FROM event_in 
      UNION 
      SELECT user_id, 
        event_id, 
        date_created, 
        'event_cool' as type 
      FROM event_cool 
     ) s 
    ORDER BY date_created; 
+0

, как это работает. .? – d3bug3r

+0

Что это значит? Первая версия - это просто запрос, который вы можете выполнить из клиента MySQL или из вашего PHP-кода. Второй должен быть выполнен на клиенте MySQL (как PHPMyAdmin), а затем вы сможете сделать что-то вроде: 'SELECT * from v_ordered_actions WHERE ....' –

+0

да, я получаю результат, но результат не упоминается Для чего нужна строка результатов ..? event_in, event_cool или добавить фото – d3bug3r

1

Вы можете использовать UNION конечно: http://dev.mysql.com/doc/refman/5.1/en/union.html Однако, это довольно медленно. Может быть, лучше создать следующую таблицу, как журнал активности, где хранить только:

  • ENTITY_TYPE (в/охлаждения/фото)
  • ENTITY_ID (идентификатор строки в таблице назначения)
  • event_id
  • user_id
  • дата

И выбрать через это. Когда вы выбрали это, соберите все идентификаторы seperatelly для каждой целевой таблицы и получите необходимую информацию из этих таблиц (при необходимости), которые будут возвращены в виде индексированного массива. Foreach activity feed и назначьте правильные данные, которые вам нужны.

Надеюсь, это может вам помочь.

Смежные вопросы