2016-03-23 11 views
1

Şeması aşağıda olduğu gibi iki tabloyu bağlamak istiyorum ... !!Tarih ve herhangi bir koşul olmadan iki tablo nasıl bağlanır?

Table : 

team_posts 

    id 
    team_id 
    text 
    location_name 
    stars_count 
    comments_count 
    created_at 
    updated_at 

team_feed_activites 

    id 
    team_id 
    operation 
    created_at 
    updated_at 

Ve tablo değerleri

team_posts 

id | team_id | text | location_name | stars_count | comments_count |  created_at  |  updated_at 

1 | 23 | crow | india  |  1  |  2  | 2016-03-18 06:30:00 | 2016-03-18 06:30:00 
2 | 24 | bird | india  |  1  |  2  | 2016-03-18 06:30:00 | 2016-03-19 06:30:00 
3 | 25 | span | india  |  33  |  2  | 2016-03-18 06:30:00 | 2016-03-18 06:30:00 
4 | 25 | bang | india  |  3  |  2  | 2016-03-18 06:30:00 | 2016-03-12 06:30:00 
5 | 27 | crow | india  |  1  |  2  | 2016-03-18 06:30:00 | 2016-03-18 06:30:00 
6 | 23 | crow | india  |  1  |  2  | 2016-03-18 06:30:00 | 2016-01-18 06:30:00 
7 | 23 | crow | india  |  7  |  2  | 2016-03-18 06:30:00 | 2016-03-18 06:30:00 
8 | 23 | hen | india  |  1  |  2  | 2016-03-18 06:30:00 | 2016-03-01 06:30:00 
9 | 23 | mani | india  |  1  |  2  | 2016-03-18 06:30:00 | 2016-03-18 06:30:00 
10 | 23 | dog | india  |  1  |  2  | 2016-03-18 06:30:00 | 2016-03-18 06:30:00 
11 | 29 | crow | india  |  10  |  2  | 2016-03-18 06:30:00 | 2016-02-26 06:30:00 
12 | 29 | god | india  |  1  |  2  | 2016-03-18 06:30:00 | 2016-03-18 06:30:00 
13 | 29 | pen | india  |  44  |  2  | 2016-03-18 06:30:00 | 2016-03-25 06:30:00 


team_feed_activites 

    id | team_id | operation  | created_at  |   updated_at 

    1 | 10 | established | 2016-03-18 06:30:00 | 2016-03-18 06:30:00 
    2 | 23 | established | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    3 | 23 | modified  | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    4 | 24 | captian changed | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    5 | 23 | captian added | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    6 | 27 |  won  | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    7 | 23 |  won  | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    8 | 23 | paricipated | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    9 | 23 |  lost  | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    10 | 23 | changed pic | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    11 | 23 | addded image | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 
    12 | 30 | established | 2016-03-19 06:30:00 | 2016-03-19 06:30:00 

Şimdi ben ne gerek bu tablo updated_at tarihine göre tabloya birleştirilir bir görünüm oluşturmaktır bulunmaktadır. Böyle ekip gelişimleri günden güne ilerlediğimi görebileceğim şekilde, bunu takım beslemeleri olarak kullanabilirim. Bana nasıl yardımcı olabileceğimi bana nasıl anlatabilirim .. !!! Şimdiden teşekkürler ..!!!

+0

Karşılaştırmanızın ayrıntı düzeyi nedir? bir gün ? bir saat ? Bir gün WHERE yan tümcesinde DATE (updated_at) öğesini kullanmanız ve her saniye – quazardous

+0

bir GROUP BY yan tümce kullanmanız gerekir çünkü etkinlikler veya yayınlar her saniye tamamlanır ... –

+0

Ne istediğinize tam olarak adlandırılır. jeft ve sağ tablodan tüm satırları. http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql – quazardous

cevap

0

Aşağıdaki kodu denedim ve çıktıyı kabul ettiğim gibi aldım.

create view team_feed AS 
    select tp.id as post_id, 
      tp.team_id as post_team_id, 
      tp.text, 
      tp.location_name, 
      tp.stars_count, 
      tp.comments_count, 
      tp.created_at as post_created_at, 
      tp.updated_at as post_updated_at, 
      '' as team_feed_activites_id, 
      '' as team_feed_activites_team_id, 
      '' as team_feed_activites_operation, 
      '' as team_feed_activites_created_at, 
      '' as team_feed_activites_updated_at, 
      tp.updated_at as event_updated_at 
    from team_posts as tp 
    UNION 
    select '' as post_id, 
      '' as post_team_id, 
      '' as text, 
      '' as location_name, 
      '' as stars_count, 
      '' as comments_count, 
      '' as post_created_at, 
      '' as post_updated_at, 
      tfa.id as team_feed_activites_id, 
      tfa.team_id as team_feed_activites_team_id, 
      tfa.operation as team_feed_activites_operation, 
      tfa.created_at as team_feed_activites_created_at, 
      tfa.updated_at as team_feed_activites_updated_at, 
      tfa.updated_at as event_updated_at 
    from team_feed_activites as tfa 

Yukarıdaki sorgu i event_updated_at temel alan tablo seçim olarak benzersiz bir sütun yapılmış ve görünümü bu yaptı. Ve bu verileri almak için aşağıdaki sorguyu kullandım.

select post_id, 
    post_team_id, 
    text, 
    location_name, 
    stars_count, 
    comments_count, 
    team_feed_activites_id, 
    team_feed_activites_team_id, 
    team_feed_activites_operation 
from team_feeds 
order by event_updated_at ASC 
0

Sadece dikkatle yinelenen biraz zaman kaydeder vermek ve yeni adı atar bu sorguyu SELECT tp.field,tfa.field FROM team_posts tp,team_feed_activites tfa

kullanabilir ama kullanabilirsiniz updated_at alanda

SELECT * FROM team_posts tp 
    INNER JOIN team_feed_activites tfa ON tp.updated_at = tfa.updated_at; 
+0

tp.updated_at = tfa.updated_at Eğer iki tablo tarihini anlarım, o zaman takımın diğer aktivitelerini alamayacağım. Takımın aktivitelerini veya gönderilerini almak sadece iki masa tarihleri ​​aynıysa .. –

+0

Cevabınıza saygı duyuyorum Efendim, Ama bence bu sadece "updated_at" olan verileri birleştirecek ve diğerlerini atlayacak. – rmondesilva

+0

@rmondesilva evet doğru. –

0

dayalı iki tablodaki verileri birleştirmek için basit INNER JOIN kullanmak Her alan için aynı alanda olduğu için bu alanın yerini alacak

alan adı atama: tp.id as tp_id

+0

biz zaten bunu denedim duplok kayıtları alırsınız ... –

+0

Çünkü herhangi bir yorum eklemezseniz, o zaman çift kayıtlar verecektir. Eğer her zaman bu soruyu sormazdı eğer ben aynı sütun vardı olurdu eğer% 100 – kuna88

+0

çalışacak yeni sütun verebilir, böylece ben her iki tablodan ortak alan verin lütfen. –

0

LEFT JOIN ve RIGHT JOIN kullanarak bağlanın ve daha sonra bunları UNION ALL kullanarak birleştirebilirsiniz.

SELECT * 
FROM 
(SELECT a.* FROM team_posts a 
     LEFT JOIN 
     team_feed_activities b 
     ON a.updated_at=b.updated_at 
UNION ALL 
SELECT a.* FROM team_posts a 
     RIGHT JOIN 
     team_feed_activities b 
     ON a.updated_at=b.updated_at) subquery 
ORDER BY updated_at DESC 

NOT: iki (alt sorgular) SELECT sütun sütun aynı sayıda OLMALIDIR. Örnek:

SELECT a.*, b.operation

saniye, bir edilmelidir aynı

SELECT a.*, b.operation veya

SELECT a.*, b.team_id sürece, her iki tablo aynı kolon sayısını görüntüler gibi.

+0

It tabloyu birleştirir ancak sıralamayı güncellemeye göre alamıyorum. Bunun yerine, update_at sütununun, iki kez bir takım gönderim tablosundan ve diğer ekiplerden ( –

+0

@ManiKandan) yanıtını aldım. Cevabımı güncelledim. Lütfen kontrol et. – rmondesilva

+0

"Türetilen her tablonun kendi takma adı olmalıdır" hatası alıyorum. Bu hata ny updated_at sırasına göre herhangi bir takma ad vermediğinden dolayı sanırım. –