Bir MySQL veritabanındaki tüm tabloları 25 en son eklenen kayıtlar alınıyor

3 Cevap php

Sonunda aynı yapılar ile çeşitli tablolar var olacaktır ("sitefeather" adında) bir MySQL veritabanı var. Yapısı şudur:

id INT(11) NOT NULL auto_increment, site VARCHAR(1000) NOT NULL, action1 BIGINT(9) NOT NULL, action2 BIGINT(9) NOT NULL, createddatetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id), UNIQUE (site)

Ben tüm tablolar (her tabloda "site" olarak adlandırılır) 25 en son eklenen girdilerinin bir listesini yazdırmak istiyorum. Bu PHP ile nasıl yapabilirim?

Teşekkür peşin,

John

EDIT: değişken olacaktır tabloların bir dizi için ben bu ne yapardın?

3 Cevap

Sen çizgisinde bir şey yapmak isteyeceksiniz:

(
    select 't' as table_name, id, createdatetime 
    from t 
    order by createdatetime desc 
    limit 25
)
union
(
    select 'u' as table_name, id, createdatetime 
    from u 
    order by createdatetime desc 
    limit 25
)
union
(
    select 'v' as table_name, id, createdatetime 
    from v 
    order by createdatetime desc 
    limit 25
)
order by createdatetime desc
limit 25

Bu size çeşitli tablolar createdatetime alanında herhangi bir indeks parası güvence altına almalıdır ve 25 çıkan kimlikleri seçilen her hangi tablo gelen belirlemek sağlayacaktır.

Dan http://dev.mysql.com/doc/refman/5.0/en/union.html

(SELECT id FROM table1)
  UNION ALL
(SELECT id FROM table2)
  UNION ALL
(SELECT id FROM table3)
  UNION ALL
(SELECT id FROM tableN)
  ORDER BY createdatetime DESC 
  LIMIT 25

Sen really burada optimizasyonlar için indeksler içine bakmak isteyecektir ...

Bunu yaparken, ya da çok sık, başka bir nedenden dolayı bir kerede tüm tabloları sorgulama için gidiyoruz eğer, set up a MERGE table birleşik verilere kolay erişim sağlayan isteyebilirsiniz.

CREATE TABLE merged_table (
    id INT(11) NOT NULL auto_increment,
    site VARCHAR(1000) NOT NULL,
    action1 BIGINT(9) NOT NULL,
    action2 BIGINT(9) NOT NULL,
    createddatetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(id),
    UNIQUE (site)) ENGINE=MERGE UNION=(table1,table2,table3,tableN) INSERT_METHOD=LAST;

Eğer aynı masalar her zaman sorgulama için gidiyoruz Ancak, bu yöntem sadece etkilidir.