Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    34

    query difficile o query impossibile?

    Ciao ragazzi
    non capisco se sta cosa è difficile (io non riesco a venirne a capo) oppure impossibile

    Ho una tabella su database mysql

    id | id_pro | nome_dati_pro
    ----------------------------------
    1 | 125 | 2,4,6,8
    2 | 125 | 66,68
    3 | 125 | 70,71
    4 | 12 | 2,3,4


    Detto questo io avrei bisogno di prelevare tutti i prodotti che hanno nel campo nome_dati_pro il num 2,4,70 e naturalmente la query dovrebbe restituirmo l'id_pro di tutti i prodotti che rispettano la condizione


    codice:
    SELECT * from tabella WHERE nome_dati_pro LIKE '%2%' AND nome_dati_pro LIKE '%4%' AND  nome_dati_pro LIKE '%70%'
    Questa naturalmente non funziona perchè i dati dello stesso prodotto sono distribuiti in più record
    Usare OR al posto di AND naturalmente non mi darebbe un risultato che rispetta tutti i numeri da cercare (2 4 70)

    Spero di essermi spiegato
    Qualche idea? oppure è impossibile?

    ciao e grazie a tutti!!!!!

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Faresti bene a normalizzare la tabella per evitare di questi problemi.
    Comunque non hai nemmeno specificato su quale db stai lavorando.

  3. #3
    chissà se inventeranno mai un vaccino che guarisca dalla malattia che impedisce di indicare (come da regolamento) con quale database si sta lavorando...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    34
    scusate

    MYSQL :-)

  5. #5
    lo faccio per uno, agli altri pensaci tu

    SELECT * from tabella WHERE (',' & nome_dati_pro & ',') LIKE '%,2,%'

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    La soluzione di optime è buona per tutte le stagioni.
    Visto che stai usando mysql puoi anche usare la sua funzione specifica find_in_set()

    codice:
    select * from tabella
    where 
    find_in_set(2,nome_dati_pro) and
    find_in_set(4,nome_dati_pro) and
    find_in_set(70,nome_dati_pro)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    34
    uhmm no ... la difficoltà qui sta nel raggruppare tutti gli "id_pro" che contengono i numeri 2 - 4 - 70 dato che sono su record diversi.

    cercando così restituisci una serie di record che contengono almeno uno dei quei valori ....

    non so se mi sono spiegato

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    34

    select * from tabella
    where
    find_in_set(2,nome_dati_pro) and
    find_in_set(4,nome_dati_pro) and
    find_in_set(70,nome_dati_pro)

    anche qui il risultato della query è 0.

    Penso che sia perchè i valori da cercare non sono nello stesso record, ma su record diverse e quindi non trova mai un record che soddisfi tutti i dati cercati

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    La query è una schifezza (conseguenza della struttura) ma dovrebbe fare ciò che vuoi.
    Occhio alla lunghezza di group_concat_max_len che di default è 1024 caratteri.

    codice:
    select id_pro,group_concat(nome_dati_pro) as elenco
    from tabella
    group by id_pro
    having
    find_in_set(2,elenco) and
    find_in_set(4,elenco) and
    find_in_set(70,elenco)

  10. #10
    io passerei per una tabellina di appoggio - forse il server lavora di meno

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.