Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    confronta più array per ricerca multi attributo

    Ho bisogno di aiuto su una banca immagini che sto realizzando
    Per ogni immagine ho previsto vari attributi (che vengono salvati in una tabella che raccoglie idimg, idcriterio, idopzione).

    Il mio problema è che vorrei effettuare una ricerca in quella tabella per ottenere solo gli idimg che soddisfano tutti i criteri di ricerca.
    Al momento sono arrivato ad elencare le immagini che corrispondono ai singoli criteri, ma non riesco a capire come cavolo numerarli e confrontarli (array_intersect?).

    Mi date una mano?

    $conta = 0;

    foreach ($cri as $key => $value) {
    echo "<hr>ARRAY#$conta: idcriterio = $key AND idopzione = $value
    ";
    ///crea l'array corrispondente a questo criterio
    $result = mysql_query("SELECT idimg FROM ib_immagini_opzioni where idcriterio = $key AND idopzione = $value");
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){
    echo "$row[idimg]
    ";
    }
    $conta++;
    }
    echo "<hr>Adesso confronta gli array:
    ";

    E adesso...?

  2. #2
    I criteri sono fissi?
    Perchè non hai strutturato una tabella con una colonna per criteri? In questo modo la query sarà molto più semplice e performante.

  3. #3
    In effetti la tabella che mi suggerisci c'è, ed è strutturata così:
    idimg, idcriterio, idopzione

    A me serve, in funzione di una combinazione di criterio+opzione (es: formato=A4, inquadratura=larga e taglio=orizzontale), avere l'elenco degli idimg che corrispondono a TUTTI quei criteri.

    Volevo capire se è meglio fare un array per ogni query (criterio+opzione), poi confrontarli o se fare direttamente una query comprendente tutti i criteri selezionati dall'utente quando ricerca l'immagine.

    Tu che dici?
    Grazie

  4. #4
    Originariamente inviato da roooxanne
    In effetti la tabella che mi suggerisci c'è, ed è strutturata così:
    idimg, idcriterio, idopzione
    Non mi sembrava di aver suggerito quel tipo di tabella, ma questo:

    idimg, formato, inquadratura, taglio, etc.

  5. #5
    ops...

    io pensavo di aver fatto una cosa fatta bene facendola come ti dicevo perchè in questo modo per ogni immagine inserisco solo il criterio+opzione presente (la immagini possono avere anche solo un solo criterio, in questo modo inserisco solo quello, senza necessariamente salvare anche tutti gli altri vuoti...).

    In ogni caso mi sfugge sempre il modo per fare una query per le sole immagini che corrispondono ad una combinazione di criteri.... confronto array o direttamente query?

    scusami, ma sono dentro al tunnel e inizio a perdere lucidità...

  6. #6
    Ti basta costruire la clausola WHERE secondo le necessità. Ad esempio

    WHERE (formato = 'A4')
    WHERE (formato = 'A4') AND (inquadratura = 'larga')
    WHERE (formato = 'A4') AND (inquadratura = 'larga') AND (taglio = 'orizzontale')

    e così via

  7. #7
    ci ho provato....ma non funziona, perchè ogni riga della tabella è fatta: idimg, idcriterio, idopzione.

    A me arriva un array di ricerca del tipo:
    Array ( [2] => 7 [3] => 10 [5] => 13 )
    (criterio2 = opzione7, criterio3 = opzione10, criterio5, opzione13)

    Nella tabella io ho, ad esempio, per le immagini 31,32 e 50
    31 2 7
    31 3 10
    31 5 13

    32 2 7
    32 3 10
    32 5 13

    50 2 7
    50 3 10

    Io vorrei che in uscita mi uscissero solo 31 e 32, che sono i due idimg corrispondenti ai criteri di ricerca (la 50 ne soddisfa solo due)

    Se credi sia il caso sono disponibile anche per una consulenza a pagamento

  8. #8
    Non l'ho testata, ma probabilmente è la strada corretta:

    Codice PHP:
    SELECT idimgCOUNT(idimg) AS conteggio
    FROM ib_immagini_opzioni
    WHERE 
    ((idcriterio 2) AND (idopzione 7)) OR 
              ((
    idcriterio 3) AND (idopzione 10)) OR
              ((
    idcriterio 5) AND (idopzione 13))
    GROUP BY idimg
    HAVING conteggio 

    Dove "HAVING conteggio = 3" indica che tutte e 3 le condizioni devono essere soddisfatte.

  9. #9
    sono un po'impazzito per personalizzare ancora un po' la query,
    ma ti devo dire un grande grazie perchè la strada era assolutamente correttissima!

    alla prossima!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.