Benim MySQL veritabanı ilişkileri ince-ayar ve nasıl JOIN kullanılır?

2 Cevap php

Ben mysql ve veritabanları için çok yeni, o yüzden burada yardıma ihtiyacım var ...

Sadece verilen değişken ad_id olduğunda nasıl, aşağıdaki tablodan bir kaydı almak için JOIN kullanmalıyım?

category and category options are filled in manually i.e. the users may not alter them. So they are only reference tables, but I am not sure this is how I should do it... I have 6 tables:

category:
cat_id (PK)
cat_name

category_options:
option_id (PK)
cat_id (FK)
option_name

option_value:
value_id (PK) (AI) // I think this should have Auto Increment
option_id (FK)
classified_id (FK)
value

classified: (THIS IS THE MAIN TABLE YOU COULD SAY)
classified_id (PK) (AI)
ad_id
cat_id
headline
description

area: // I am thinking about moving these fields over to the posters table, right?
area_id (PK)
classified_id (FK)
area
description

İşte tablolar halinde bir ilan eklemek nasıl:

mysql_query("INSERT INTO classified (ad_id, cat_id, headline, description) VALUES ('$ad_id', $cat_id, '$headline', '$description')");
$last_classified_id=mysql_insert_id();

mysql_query("INSERT INTO poster (classified_id, name, email, tel) VALUES ($last_classified_id, '$name', '$email', '$tel')");

mysql_query("INSERT INTO area (classified_id, area, community) VALUES ($last_classified_id, '$area', '$community')");

Ben JOIN yeni duyuyorum!

Every category has sub options (CARS -> color) and every option has a value. I want to, only by having the ad_id, select all this information.

Ben bu yüzden nasıl yapabilirim?

And should I merge the area and posters table? Also, please take a careful look at my db, and tell me if there is anything I might have missed...

Bu gerçekten benim bilgi-tabanı dışında çok detaylı açıklamalar takdir edilmektedir!

Teşekkürler

2 Cevap

Classified_id ve ad_id: Eğer gizli birincil anahtar olabilir iki alan var gibi görünüyor. Sonra gizli bir tek-bir korelasyona sahip iki tablo, afiş ve alanı var. Bu durumda ise, sınıflandırılmış tüm alanları koyabilirsiniz.

Lütfen insert tablolara tabloları birleştirmek için bir sorgu böyle istiyorum:

select
    classified.ad_id,
    classified.classified_id,
    classified.headline,
    classified.description AS classified_description,
    poster.name,
    poster.email,
    poster.tel,
    area.area,
    area.description AS area_description from
    classified inner join
    poster
    on
        classified.ad_id = poster.classified_id inner join
    area
    on
        classified.classified_id where
    classified.ad_id = 123

Bu onlardan birden fazla veri almak için bazı tabloların katılarak bir örnektir:

SELECT c.cat_name, co.option_name, cl.headline
FROM category c 
INNER JOIN category_options co ON co.cat_id = c.cat_id
INNER JOIN classified cl ON cl.cat_id = c.cat_id
WHERE cl.ad_id = {Your ad_id}

Siz aynı şekilde (afiş, alan) gerekli diğer tabloları katılabilirsiniz.

Düzenle (tepki Yorumlamak için): 'c', 'cl' ve 'eş' 'kategorisinde', 'sınıflandırılmış' ve 'category_option' tabloları rumuzudur. Onlar katılmak ile ilgisi yok. Here 'nin kaynağıdır. I FROM category c derken, bu beni kategori tablo için bir kısayol olarak 'c' kullanmanıza olanak sağlar. : Adlar kullanarak select / / birleştiği yerde ben bunun yerine benzeri nasıl yaptığını maddesi yapmanızı sağlar

SELECT category.cat_name, category_options.option_name, classified.headline
FROM category
INNER JOIN category_options ON category_options.cat_id = category.cat_id
INNER JOIN classified ON classified.cat_id = category.cat_id
WHERE classified.ad_id = {Your ad_id}

Temelde bazı yazarak kaydedebilirsiniz kısayol bulunuyor.