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

    [MYSQL] Count in una query con 2 tabelle

    Ciao a tutti,
    ho una domanda che mi sta tenendo sveglio da 3 giorni e non sono ancora riuscito a trovare una soluzione.

    Io ho 2 tabelle così strutturate:

    `materiale_prodotto` (
    `id` int(9) unsigned NOT NULL auto_increment,
    `name` varchar(30) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC

    `prodotto` (
    `id` int(9) unsigned NOT NULL auto_increment,
    `description` text,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC

    Nella tabella materiale_prodotto ho i seguenti valori per il campo name:

    jeans
    cotone
    lycra
    nylon

    Nella tabella prodotto ho la descrizione dei prodotti (campo description) nel quale fra le altre cose (es. colore, taglia, etc. ) viene citato anche il materiale(es. jeans, cotone, etc.)

    Quello che mi serve è tramite un count o altre soluzioni di veloce esecuzione per il db sapere se nella description dei prodotti presenti nella tabella prodotto è presente uno dei materiali della tabella materiale_prodotto
    Se dovessi selezionare solo uno dei materiali la query sarebbe molto semplice:

    select count(*) from prodotto where description like "%cotone%"

    e così dovrei fare per ogni materiale.

    Il mio scopo è ottenere questo con una sola query in modo che come result della query avrò ad esempio:

    jeans 38
    cotone 35
    lycra 10
    nylon 23

    La struttura delle tabelle non è modificabile per cui non posso aggiungere un nuovo campo nella tabella prodotto con id_materiale per cui questa soluzione è da escludere a priori.

    Ho provato a fare una serie di query ma senza risultati esatti.

    Qualcuno mi può aiutare.
    Sul mio sever gira php 4.4.5 e mysql 4.1.21 ma si accettano soluzioni anche utilizzando php 5 e mysql 5

    Ciao
    Stefano

  2. #2
    Fatta la prova, ecco il risultato:
    Ho 'riempitor le tabelle cosi':
    codice:
    materiale_prodotto:
      id           name
      1           jeans
      2           cotone
      3           lycra
      4           nylon
    
    prodotto:
      id         description
      1          roba di cotone
      2          pantaloni di cotone
      3          jeans di lycra
    Usando questa query:
    codice:
    select materiale_prodotto.name as `Name`, (select count(*) from prodotto where description like concat("%",`Name`,"%")) as `Count` from materiale_prodotto
    si ottiene:
    codice:
    Name	Count
    jeans 	1
    cotone 	2
    lycra 	1
    nylon 	0
    Dovrebbe bastare, anche se sono stato un po' bastardo ed in una descrizione ho scritto "jeans di lycra" che fa contare 1 jeans e 1 lycra ... chissà se va bene!

    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  3. #3
    Ciao Zappa, miticoooooooooooooooooooo!!!!

    Era proprio quello che mi serviva e funziona alla grande. In più mi serve assolutamente il fatto che conti "jeans di lycra" sia 1 volta per jeans che 1 volta per lycra... è proprio perfetto. Mi hai salvato da altre notti insonni

    Grazie mille ancora e a buon rendere

    Stefano

  4. #4
    Rispondo al tuo messaggio privato, nel quale mi chiedevi come fare una query che ti desse solamente i name con corrispettivo count che hanno un valore diverso da zero, ricordandoti che è bene farle sul forum, le domande, se portano qualcosa di nuovo a conoscenza di tutti!!!
    In rosso le aggiunte in testa e in coda alla query

    codice:
    select * from (select materiale_prodotto.name as `Name`, (select count(*) from prodotto where description like concat("%",`Name`,"%")) as `Count` from materiale_prodotto ) as `Result` where `Count` > 0
    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  5. #5
    Ciao Zappa,
    innanzitutto chiedo scusa a te e agli utenti del forum per non aver scritto la domanda nel post ma avertela inviata via messaggio privato: non accadrà più!!!

    Ti ringrazio ancora per l'aiuto e per la veloce risposta: funziona alla grande!!!!

    Ciao
    Stefano

  6. #6
    No problem!

    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

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.