MySQL / PHP sorgu yardım işleme

4 Cevap php

Tamam, ben üç alan geri (zaman damgası, mesaj ve articleNum) almak için katılmadan ve bir seçme yapıyorum iki tablo var. Şimdi, bu veriler temelde bir makale oluşturulmuş ve değiştirilmiş zaman, ben geri aldım bu üç alanları işlemek için mantığı yazmak zorunda bir günlük olduğunu. Bir makale oluşturulan ve / veya son düzenleme zaman anlamaya için, ben mesajın bakmak ve (modifiye için yaratılmış ve "güncellenmiş" için "eklendi") anahtar kelimeler için bakmak gerekir. Ben bir geri doç dizideki sorgu sonuçlarını var ve ben sonunda sonuç articleNum anahtarı olan anahtar ve (modifiye oluşturulan) bir iki değeri dizi olmak üzere bir dizi doç olmak istiyorum. Bazen de, her zaman bir modifiye değeri yok olmayacak, ama her zaman bir yaratılmış olacaktır. Ben bile böyle bir sorunla başlamak istiyorum nasıl herhangi bir fikir?

EDIT From what I can tell, it looks like the date is stored as a bigint in Unix seconds. Clarification: the created and modified values are not fields from the table, I need to figure it out from the message field. There will always be one added time but sometimes there could be 0 or more updated messages and I would need to figure out the latest.

EDIT 2 Ok, sorry about the wording of the question. After looking at the problem a little longer I realized I could do this all in two SQL statements. For finding the added date I used:

"SELECT MIN(action_logs.time_added), article.number
 FROM action_logs
 JOIN proposal ON action_logs.article_num = article.number
 WHERE action_logs.message LIKE '%added%'
 GROUP BY article.number"

Muhtemelen MAX hariç, en son için aynı şeyi yapabilirdi. Olsa önerileri için teşekkür ederiz.

4 Cevap

Burada bazı varsayımlar yapıyorum:

Eğer tablo depolar mesajlarınızın her biri için bir satır iseniz (/ updated katma), daha sonra bu sorgu ihtiyacınız sütunları ile, makale başına bir satır dönecekti (articleNum düzenlendi, Güncellendi):

SELECT 
  A.articleNum, 
  MCreated.Timestamp AS Created, 
  MUpdated.Timestamp Updated
FROM Articles A
JOIN Messages MCreated 
  ON MCreated.articleNum = A.articleNum
  AND MCreated.Message = 'added'
LEFT JOIN Messages MUpdated
  ON MUpdated.articleNum = A.articleNum
  AND MUpdated.Message = 'updated'

Bu kötü ifadeli sorudur. Bu this biraz kokuyor

Iki tablo nedir? Mesajı alan nedir? Muhtemelen olaylar?

Neden sadece 'yarattı' ve makaleleri tablolarında 'updated' değil mi?

Eğer tasarım ses olduğundan emin misin?

Böyle bir şey deneyin:

$articles = array();
while ($row = mysql_fetch_assoc($result)) {
    $articles[$row['articleId']] = array(
        'created'  => $row['created'],
        'modified' => $row['modified']
    );
}

Emin değilim soruyu anlıyorum ..

Sen mesajın özü ve Zaman düzenlendi ve Zaman Modifiye bakmak istiyorum?

Bu durumda eğer, tarih / saat biçimi nedir? Bu normal bir ifade kullanarak bu bilgileri bulmak çok kolay olmalıdır.

Ian

Edit -

Eğer sorgunun çıkmak mesajın onları ayıklamak istiyorsanız, o zaman düzenli ifadeler bu görevi tamamlamak için olası bir aday vardır.

Örnek bir mesaj göndermek.