Domanda

So che mySQL 5.x non supporta si INTERSECANO, ma che sembra essere la cosa di cui ho bisogno.

Tabella A:Prodotti (p_id)

Tabella B:Prod_cats (cat_id) - categoria di informazioni (nome, descrizione, ecc)

Tabella C:prod_2cats (p_id, cat_id) - molti a molti

prod_2cats contiene molti (1 o più) categorie che hanno ricevuto i Prodotti (A).

Facendo una query di ricerca di filtro (utente interattivo) e devono essere in grado di selezionare tra più categorie di prodotti che rispondono a TUTTI i criteri.

Ex:- 80 prodotti assegnati alla Categoria X - 50 prodotti assegnati per la Categoria Y - ma solo 10 prodotti (intersezione) sono assegnati ad ENTRAMBI i cat X E Y cat

Questo sql lavora per una di queste categorie:

SELECT * FROM prodotti WHERE p_show='Y' E p_id IN ( SELECT p_id DA prods_2cats COME PC DOVE PC.cat_id =" .$cat_id ."

<-$cat_id è sterilizzata var passati dal modulo di query .

Io non riesco a trovare il modo di dire 'mi danno l'intersezione di Un cat e cat B' e ottenere il sottoinsieme (10 record, dal mio esempio)

Aiuto!

È stato utile?

Soluzione

Applicare la definizione di intersezione dalla teoria degli insiemi.Quindi, se X interseca Y dà insieme Z, allora per ogni x in Z si sostiene che x X e x in Y.

Qualcosa di simile

SELECT * FROM products WHERE p_show='Y' AND p_id IN 
( SELECT p_id FROM prods_2cats AS PC WHERE PC.cat_id =X) AND p_id IN
( SELECT p_id FROM prods_2cats AS PC WHERE PC.cat_id =Y)

Altri suggerimenti

Hmm, io non sono sicuro che sia il modo migliore per farlo, ma può essere aggiunto al tuo già esistente query in modo abbastanza semplice:

SELECT *
FROM products
WHERE p_show='Y'
    AND p_id IN (SELECT p_id
                 FROM prods_2cats AS PC
                 WHERE PC.cat_id = $cat1_id)
    AND p_id IN (SELECT p_id
                 FROM prods_2cats AS PC2
                 WHERE PC2.cat_id = $cat2_id)
SELECT *
FROM products
WHERE p_show='Y'
    AND p_id IN (SELECT p_id
                 FROM prods_2cats AS PC
                 WHERE PC.cat_id in ($cat1_id, $cat2_id ))

O, ancora meglio

SELECT p.*
FROM products p INNER JOIN prods_2cats AS PC on p.p_id = PC.p_id
WHERE p_show='Y' and C.cat_id in ($cat1_id, $cat2_id )

Spero che questo aiuta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top