Top 25 tablo alınıyor (alan değerleri tanımlanmıştır)

1 Cevap php

Aşağıdaki kod, bir MySQL veritabanı ilk 25 en yakın zamanda oluşturulmuş tabloları döndürür.

$index = mysql_query("select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='bookfeather' order by CREATE_TIME desc limit 25");

Her tablo biçimi aşağıdaki gibidir:

id INT(11) NOT NULL auto_increment, site VARCHAR(350) NOT NULL, votes_up BIGINT(9) NOT NULL, votes_down BIGINT(9) NOT NULL, PRIMARY KEY(id), UNIQUE (site)

Ben göstermek için kodunu değiştirmek istiyorum:

  1. "Site" için farklı girişlerin sayısına göre Top 25 masalar

  2. "Votes_up" toplamına dayalı Top 25 masalar

Bunu nasıl yapabilirim?

Teşekkür peşin,

John

1 Cevap

1. Top 25 tables based on number of different entries for "site"

IIUC, "site" UNIQUE, yani gerekir:

select
  TABLE_NAME,
  ifnull(TABLE_ROWS, 0) as SITES
from INFORMATION_SCHEMA.TABLES
  where TABLE_SCHEMA='bookfeather'
order by SITES desc limit 25

Ama hayır için TABLE_ROWS yerine. Bir göz kırpma ve bir selam ile benzersiz SITE kayıtları hile - yeniden tasarlamak daha iyi. :)

* 2. "Votes_up" toplamı * dayalı Top 25 masalar

Eğer herhangi bir nedenle, yeniden tasarlamak mükemmel tavsiye takip edemez ise, programlama her tablo üzerinde yineleme gerekecek. Senin kodunda sonucu biriken, SHOW TABLES üzerinde döngü olabilir

select 'tblName', ifnull(sum(VOTES_UP), 0) as UPVOTES from tblName

birikmiş satır ikinci alanında sıralama ve ilk 25 için budama.

Bu bir varyantı () 'başına tablonun tetikleyiciler tarafından anında güncellenen, ya da bir {sunulan, cron tarafından periyodik olarak yeniden yazılmış, belki upvotes d tablolar ve toplamı izler bir özet tablo içerir Bir UNION bütün kurucu sorguları olan [(1)]} (her yeni tablo için re-CREATE d).

Ama bu herhangi yapmayın. (Bu bir endişe, belki de, bölüm için depolama motorunu soran) bir tek tablo tasarımında geçiş :).