Tüm bu ayrıntılar var çok-çok tablodan öğeyi seçin ...

1 Cevap php

(PHP / MySQL) Bana bu işleri söyleyerek önsöz olsun, ve temiz bir yolu olup olmadığını merak ediyorum ki. Bu biraz ... hayvani görünüyor? Ve benim verimli bir kodlama için bilinen değilim. :-/

TABLE (many-to-many)
scenid   mapid
  AA      01
  AA      02
  AA      04
  BB      01
  BB      04
  CC      02
  CC      03
  CC      05
  DD      01
  DD      02
  DD      03

You are searching for scenarios that have ALL of these maps: 01, 02, 03
(having all + some others is ok)

Benim geçerli yöntemi, bu sorguyu kullanmak için:

SELECT scenid, COUNT(scenid) FROM `TABLE`
WHERE mapid IN ( 01, 02, 03 )
GROUP BY scenid ORDER BY COUNT(scenid) DESC, scenid ASC

Bu listeyi üretecek Hangi:

scenid  COUNT
  DD      3
  AA      2
  CC      2
  BB      1

Sonra, içinde PHP, bir while döngü çalıştırmak bu kadar uzun COUNT mapids ve == toplam sayısı (hala olduğu gibi, yeni bir diziye kopyalar scenids Bu durumda, 3). Bu sadece bazı gerekli haritaları içeren tüm sonuçları kapalı kırpar.

Yine, this works. Ama yine MySQL ve çok yeniyim Benim "works" başka bir kişinin olup olmadığını PHP (ve programlama içine benim ilk adım sensin) bu yüzden hep merak ediyorum "did you see that idiot just reinvent the wheel? lulz "

Daha iyi bir yolu var mı? Zaman ayırdığınız için teşekkür ederiz.

1 Cevap

Sizin Sorgu Tamam görünüyor, ama SQL ile HAVING deyimine de filtreleme yapabilirsiniz:

SELECT scenid, COUNT(*)
FROM `TABLE`
WHERE mapid IN ( 01, 02, 03 )
GROUP BY scenid
HAVING COUNT(*) = 3
ORDER BY scenid ASC