PHP MySQL Çoklu Masalar Out Veri alma

3 Cevap php

Ben, kötü ifadeli olabilir dün ben anlamadım iki şekilde benzer bir soru sordu ve bu gerçekten çatlamak gerekiyor :) ben daha önce hiç yapmadım ve benim projelerin pek çoğu için çok yararlı olacağını şeydir.

Bu bir dizin web sitesi için. Ben üç tablo var: entry, location, ve entry-locations. {: [(0)]} vb isim, adres, resim, gibi bir bina hakkında bilgi içerir location sadece her bina olabilir olası yerlerde bir listesidir. Konumu tablo oldukça çok alakasız Bu örnek için, sadece ben sitenin diğer alanlarda görüntüleyebilirsiniz konum hakkında bilgi içeren.

entry-locations yerlere girişleri bağlayan bir tablodur. Sadece bunun için ayrı bir tablo gerekir neden merak ediyorsanız aynı binada could var çünkü ... iki alan, entry-id ve location var Birden yerleri (sormayın).

Temelde, ne yapmam gerek kendi sayfası her yerden görüntü listeleri olduğunu. Örneğin, Fransa'da her bina listelemek gerekir, bu yüzden sorgu o {[tüm verileri çekmek gerekiyor, bir yerde 'Fransa' ile her rekoru dönen entry-locations masaya geçmesi gerekiyor entry-id 's döndü karşılık (1)]} tablo.

Ben orada bir sorgu ile bunu yapmak için bir yoldur ve ben çok projeye bu çoğaltmak nasıl, gösterilen olabilir eğer son derece minnettar olacaktır eminim.

3 Cevap

Bu veri var düşünün:

Entry:

|id|name|
| 1|Foo |
| 2|Bar |

Entry-Location:

|entry-id|location|
|1       |France  |
|2       |Greece  |
|2       |France  |

Bu senin açıklamasından tabloları anlamak nasıl. Daha yaygın bir yaklaşım sahip olmaktır

Entry(id,name)
Location(id,name)
Entry_Location(entry_id, location_id)

Bu da başka görevlerde karışıklıklar bazı kaynak, sanırım.

Şimdi, burada id nin maç kadar, her iki tablodan veri getirmek için MySQL isteyin.

SELECT entry.* 
FROM `entry`, `entry-location` as el
WHERE entry.id = el.`entry-id`
AND el.location = 'France';

MySql şimdi bu gibi bakarak, bir tablo gibi veri davranır:

|entry.id|entry.name|el.location|
|       1|       Foo|     France|
|       1|       Foo|     Greece|
|       2|       Bar|     France|

Ve bu tablodan o el.location = 'France' girişlerini seçer ve belirtilen alanları döndürür.

This query fetches all the fields from the entry table that matches the requirements you set. First it makes MySql think of the two tables as one table, by SELECT-ing from both of them.

MySql evinde bir göz SELECT reference.

Bu nasıl?

-- // Selects all the columns from both entry-locations and entry
SELECT * 
FROM entry-locations
JOIN entry e ON e.id = el.entry-id
WHERE el.location = 'France';

-- // To just get the entry data for matching records: (Remove DISTINCT if you
-- // don't mind, or want, each entry with multiple locations in the result set
-- // multiple times)
SELECT DISTINCT e.* 
FROM entry-locations el
JOIN entry e ON e.id = el.entry-id
WHERE el.location = 'France'

Edit: Tamam, ben konumu tabloyu kaldırarak denedim, ve yerine yerin adı olarak giriş-location.location kullanılır .. Bu doğru mudur?

id in (giriş yerlerden giriş id seçin) girişi seçin *