PHP ve MySQL: satır kaynağını belirlemek için ayrı bir araya tablolar ve ifadesinden satır düzenleme

3 Cevap php

İki ayrı tablodan satır almak ve onların tarihine göre azalan bunları düzenlemek gerekir. Satırlar sırayla veya numara İletişim ve birbirleri ile hiçbir ilişkisi yoktur.

Her bir sitede güncellemeleri içeren bir tablo bir blog metin, bağlantılar, tarih, başlıklar vb tutar. Diğer görüntülerden vb başlıklar, bağlantılar, teknik özellikleri, vardır. Ben sitenin ana sayfasında bir güncelleştirmeler bölümünde bazı temel bilgileri (başlık, tarih, küçük açıklama) düzenlemek isteyen ve bu tarih sırasına olmak için.

Bir tabloya onları birleştirme ve hem türleri uygun değiştirmeden ben burada yapmak istiyorum ne değildir, blog tablo WordPress 'standart Wp_posts olduğunu, ve ben yapmak için rahat ekleyerek sütunları hissetmiyorum çok görüntü tablo uyacak. Ben daha sonra yükseltme ile çatışma olabilir korkuyorum ve beceriksiz bir çözüm gibi görünüyor (ama burada insanlar iyi çözüm bana tavsiye eğer itiraz edeceğiz anlamına gelmez).

İşte her tablonun ANLATIYOR şunlardır:

mysql> describe images;
+---------+--------------+------+-----+-------------------+----------------+
| Field   | Type         | Null | Key | Default           | Extra          |
+---------+--------------+------+-----+-------------------+----------------+
| id      | int(11)      | NO   | PRI | NULL              | auto_increment |
| project | varchar(255) | NO   |     | NULL              |                |
| title   | varchar(255) | NO   |     | NULL              |                |
| time    | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
| img_url | varchar(255) | NO   |     | NULL              |                |
| alt_txt | varchar(255) | YES  |     | NULL              |                |
| text    | text         | YES  |     | NULL              |                |
| text_id | int(11)      | YES  |     | NULL              |                |
+---------+--------------+------+-----+-------------------+----------------+

mysql> DESCRIBE wp_posts;
+-----------------------+---------------------+------+-----+---------------------+----------------+
| Field                 | Type                | Null | Key | Default             | Extra          |
+-----------------------+---------------------+------+-----+---------------------+----------------+
| ID                    | bigint(20) unsigned | NO   | PRI | NULL                | auto_increment |
| post_author           | bigint(20) unsigned | NO   |     | 0                   |                |
| post_date             | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| post_date_gmt         | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| post_content          | longtext            | NO   |     | NULL                |                |
| post_title            | text                | NO   |     | NULL                |                |
| post_excerpt          | text                | NO   |     | NULL                |                |
| post_status           | varchar(20)         | NO   |     | publish             |                |
| comment_status        | varchar(20)         | NO   |     | open                |                |
| ping_status           | varchar(20)         | NO   |     | open                |                |
| post_password         | varchar(20)         | NO   |     |                     |                |
| post_name             | varchar(200)        | NO   | MUL |                     |                |
| to_ping               | text                | NO   |     | NULL                |                |
| pinged                | text                | NO   |     | NULL                |                |
| post_modified         | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| post_modified_gmt     | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| post_content_filtered | text                | NO   |     | NULL                |                |
| post_parent           | bigint(20) unsigned | NO   | MUL | 0                   |                |
| guid                  | varchar(255)        | NO   |     |                     |                |
| menu_order            | int(11)             | NO   |     | 0                   |                |
| post_type             | varchar(20)         | NO   | MUL | post                |                |
| post_mime_type        | varchar(100)        | NO   |     |                     |                |
| comment_count         | bigint(20)          | NO   |     | 0                   |                |
+-----------------------+---------------------+------+-----+---------------------+----------------+

Böyle bir tek bir tablo (I durumda ben bunu bilmeden fazla ayrıntılı yöntemi kullanarak ben burada bunu dahil) ile kolaylıkla yapabilirsiniz:

$content = mysql_query("SELECT post_title, post_text, post_date FROM posts ORDER BY post_date DESC");
while($row = mysql_fetch_array($content))
{
    echo $row['post_date'], $row['post_title'], $row['post_text'];
}

Ama nasıl doğru şekilde düzenlemek için aynı diziye hem tabloları aramak mümkün mü?

Doğru olarak, ben onların tarihine göre kendi yankılandı sonuçları karışacağı anlamına. Belki yanlış bir bakış açısıyla bu bakıyorum ve cevap tek bir diziye değil diyorsun?

Tablo 1 satırları farklı tablodan 2 satır daha yankılandı olsun böylece Ayrıca, ben, onlar geldi hangi tablo dayalı bir koşullu ifade oluşturmak için bir yol gerekir?

I tablo 1 sonuç farklı tablodan iki gelenler daha onları şekillendirme amacıyla (çevrelerindeki birleştirilmiş farklı dizeleri ile, demek) farklı yankılandı olmak istiyorum. Ve tam tersi.

Ben bir if...else deyimi burada çalışmak istiyorum biliyorum, ama ben satır dan hangi tablo belirleyecek ifade yazabilirsiniz nasıl hiçbir fikrim yok.

3 Cevap

Eğer zorluklar çalıştırmak hangi noktada, sonuçları sayfalandırmamayı isteyebilirsiniz çünkü PHP tabanlı sıralama seçenekleri her zaman iyi bir fikir değildir.

Yukarıda açıklanan BİRLİĞİ-tabanlı sorgu daha iyi çalışır, ancak tablolar farklı şemaları sağlamak için çimdik gerekir:

(
  Select 'Image' as data_type, id, title, time as date_posted, ....
  From images
)
UNION
(
  Select 'Post', ID as id, post_title as title, post_date as date_posted, ...
  From wd_posts
)
Order By date_posted Desc Limit $foo, $bar

Anahtar her iki tablodaki sütun aynı sayıda çekmek gerektiğidir. Sütun adları çalışması için aynı olmak zorunda değilsiniz, ama onları aynı yukarıdaki yaptık.

Ben de size images.time ve wd_posts.post_date dizinleri koymak gerektiğini düşünüyorum.

Zaman (zaman damgası) ve POST_DATE (datetime) tarafından karışık format sipariş alanlar MySQL 5 üzerinde çalışacak, ben sadece denedim.

Belki bir SQL UNION yararlıdır

SELECT * FROM (
    SELECT post_title, post_text, post_date, 'posts1' AS is_from FROM posts1
    UNION
    SELECT post_title, post_text, post_date, 'posts2' AS is_from FROM posts2 
) AS posts1_posts2 ORDER BY post_date DESC

Kullanın:

while($row = mysql_fetch_array($content)) 
{ 
    $key = $row['post_date'].'-'.$row['id'];
    $array[$key] = array("table"=>1, "row"=$row);
} 

Kullan кsort($array) Her iki tablo ile bir kez bitmiş.