mysql &

4 Cevap php

(SOLVED, SEE END)

Ben aşağıdaki için PHP veya MySQL kod yapısı üzerinde ipuçları gerekir:

Diyelim ki X benzersiz kutuları var diyelim, ve Y çeşitleri meyve. Her kutu meyve her tür birini içerebilir. Bazı kutuları sadece 2 tip olabilir, bazıları her tür olabilir. Tüm kutular en az bir türü var.

Sorgu için, kullanıcı onay kutularını, meyve her tür için tek bir listesi vardır. (Ben bu hepsi aynı sorgu diziye beslemek varsayıyorum?)

Benim sorun burada başlıyor:

Eğer bir kullanıcı kontrolleri

elma, portakal ve üzüm

nasıl aşağıdaki döndürecek bir sorgu oluşturmak yapın:

Box01 (apples, oranges)
Box02 (grapes)
Box03 (apples, oranges, grapes)

ama değil:

Box04 (elma, portakal, üzüm, armut, muz)

Nasıl $ meyve Verilen bütün değerleri [] veya daha az içeren kayıtlar için döner sınırı, ancak istenen değerler mevcut değil, başka değerleri bile yok? Ayrıca, sorgu bu tür ben ileride kullanabileceğiniz özel bir isim var mı?

Bu benim için gerçek bir zor biridir ve ben zaman için teşekkür ederiz.

  • A

(PS -. Eğer sadece kavramı göstermek oldu, böyle çıktı ya da bir şey biçimlendirme konusunda endişelenmenize gerek yok ben kesinlikle sorgu kod ilgileniyorum.)

EDIT - iki istedi, belirli dbase detaya gitmiyor için üzgünüm. 3 tablolar var: Her kutuyu, her meyve açıklayan birini açıklayan bir ve 2 sütun ile bir çok-çok tablo - boxids & fruitids. Ben hem zaten kabul buydu inanıyorum.

Herkese teşekkür ederim!

MY SOLUTION

ANAX kod aşağıda bana boyunca yardım, burada yapıyor sona budur:

table "box" has columns "boxid" (primary key) & "box description" table "fruit" has columns "fruitid" (primary key) & "fruit description" table "box_has" has columns "boxid" & "fruitid"

SELECT boxid FROM box WHERE
    boxid NOT IN (
        SELECT boxid FROM box_has WHERE fruitid NOT IN ('F01' , 'F02'))

Ön arka koduna bakarak, içteki SEÇME istediğimiz VE başkalarının ne zahmetli kutuları hariç, istediğimiz dışındaki tüm meyve kutuları bulur.

Seçmek Dış sonra her sadece seçilen meyvenin herhangi birini içeren tekrarlar olmadan bireysel kutuları temiz bir getiri elde etmek için, bir kez görünür BOXID hangi kutu tablosunu kullanır.

Yardımın için teşekkür ederim, herkes!

4 Cevap

Bir meyve ve (çok-çok) meyve sepetleri birleştiren üçüncü bir tutmak için, sepetleri tutmak için bir: Üç tablolar gerekir.

Bu göz önüne alındığında, aşağıdaki gibi bir sorgu çalıştırarak istenilen sonuçları elde:

SELECT baskets.* FROM baskets, fruits, baskets_and_fruits

WHERE baskets.id = baskets_and_fruits.basketID AND
    fruits.id = baskets_and_fruits.fruitID AND
    AND baskets.id NOT IN
    (
        SELECT baskets.id FROM baskets, fruits, baskets_and_fruits
        WHERE baskets.id = baskets_and_fruits.basketID AND
            fruits.id = baskets_and_fruits.fruitID AND
            fruits.name NOT IN ('apples', 'oranges', 'grapes')
    )

Nasıl hakkında

SELECT * FROM box WHERE boxId NOT IN (
  SELECT * boxId FROM box WHERE fruit NOT IN ("apples", "oranges", "grapes"));

Soru MySQL veritabanı dışarı koydu nasıl?

Eğer bir tablo var boxes ve bir tablo fruits ve bir bağlayıcı tablo box_ fruit_linker içeriğini bağlantıları olduğunu varsayarsak:

SELECT * FROM boxes
    LEFT JOIN box_fruit_linker USING (box_id)
    LEFT JOIN fruits USING (fruit_id)
    WHERE (fruits.name = 'apples' OR fruits.name = 'grapes' OR fruits.name = 'oranges')
    GROUP BY boxes.box_id;

Lütfen sorgu WHERE kısmı kolayca kontrol kutuları dizi yineleme ve implode(' OR ', $checked_boxes) ile PHP oluşturulabilir.

Select * from box where boxId NOT IN (Select boxId from boxes where fruitType = 'grape' or fruitType = 'apples' or fruitType='oranges');

Bu aradığınız tam kodu olmayabilir ama bu fikir size yardımcı olabilir ...