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

    [mySQL]aiuto costruzione query con join

    premetto che non so proprio da che parte cominciare per costruire questa query, quindi chiedo aiuto a voi sin da subito, anche solo per dei suggerimenti.

    non vorrei essere troppo pessimista, ma così, a rigor di logica mi sembra una cosa impossibile. dunque, io ho una tabella articoli di cui vi posto la struttura:

    codice:
    CREATE TABLE `articoli` (
      `id_attributo` bigint(20) NOT NULL auto_increment,
      `articolo` int(11) NOT NULL default '0',
      `colonna` bigint(20) NOT NULL default '0',
      `valore` varchar(255) NOT NULL default '',
      `lingua` bigint(20) NOT NULL default '0',
      `assegnato` smallint(6) NOT NULL default '0',
      PRIMARY KEY  (`id_attributo`),
      FULLTEXT KEY `valore` (`valore`)
    )
    e questa immagine è un semplice esempio di come risulta strutturata:


    questa tabella è collegata ad un'altra tabella traduzioni

    codice:
    CREATE TABLE `traduzioni` (
      `id_traduzione` int(11) unsigned NOT NULL auto_increment,
      `traduzione` varchar(255) NOT NULL default '',
      `id` int(11) unsigned NOT NULL default '0',
      `lingua` int(11) NOT NULL default '0',
      `attributo` smallint(6) NOT NULL default '0',
      PRIMARY KEY  (`id_traduzione`)
    )
    e questo è lo screenshot della seconda tabella:


    le due tabelle sono collegate tra di loro attraverso i campi colonna <--> traduzione.
    io vorrei ottenere due tabelle da fondere ottenendo una macrotabella che abbia come intestazioni tutti i campi della tabella traduzioni, e fin qui non ci sono problemi, mentre la seconda tabella dovrebbe avere 19 colonne [tante quante sono le intestazioni] ed ogni record dovrebbe essere riempito con il valore corrispondente, e dove non c'è nessun valore ottenere il campo NULL.

    codice:
    +----------------------------------------+
    | codice | colore | lunghezza | diametro |
    +----------------------------------------+
    | 012345 |  nero  |   15 m    |   NULL   |
    +----------------------------------------+
    | 987654 | bianco |   NULL    |   NULL   |
    +----------------------------------------+
    | 159730 |  NULL  |   7.5 m   |   2 mm   |
    +----------------------------------------+
    ho riportato solo 4 colonne per comodità; naturalmente non voglio ottenere tutto con una query, questo penso sia davvero impossibile, ma orttenere le intestazioni [e questo l'ho fatto, che era una scicchezza], e con una seconda query ottenere le righe restanti che contengono i valori.

    In lternativa lo potrei fare da script, in quanto impaginando i dati da php riesco a farlo con un ciclo, facendo un ciclo che scorre i dati e che arrivato a 19 chiude e apre un nuovo tr; ma il problema è che io devo ottenere un file csv per poter poi mandare il tutto in traduzione e la pagina html non va bene.
    Se potessi creare un file di excel così impaginato sarebbe il massimo

    si accettano suggerimenti in entrambi i sensi, preferibilmente seguedno la prima via.

    se qualcosa non è chiaro chiedo scusa, chiedete pure.

    Ringrazio sin da ora chi mi saprà dare una mano.
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  2. #2
    Non mi e' tutto chiaro, ma posso dirti cosa ho fatto io per una cosa simile... Ho una struttura su db formata da 12 tabelle, devo fornire dei dati assemblati dalla struttura in formato csv. Ho fatto una tabella di appoggio che viene popolata con una query galattica. da questa tabella mi salvo il backup in csv per excel.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    ti ringrazio per la risposta, forse ho capito anche come fare la tabella di appoggio e la query per popolarla, se non avrai più mie notizie in questo thread significa che sono riuscito a farlo, altrimenti mi toccherà stressarti ancora


    grazie ancora!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    ci sono riuscito!!!!

    grazie mille! senza il tuo suggerimento non avrei concluso niente!!

    se magari a qualcuno dovesse servire posto il codice così com'è l'ho usato io, certo, sarà da adattare alle proprie esigenze, e magari sarà anche da ottimizzare, ma visto che il codice l'ho dovuto eseguire una volta sola, non mi sono preoccupato di quanto fosse ottimizzato, visto che il mio esegue un casino di query

    comunque, eccolo:

    codice:
    <?
    $db_host = 'localhost';
    $db_user = ******';
    $db_pass = '********';
    $db_name = '********';
    
    $db_link = mysql_connect($db_host, $db_user, $db_pass)or die(mysql_error());
    mysql_select_db($db_name, $db_link)or die(mysql_error());
    
    $sql = 'SELECT DISTINCT `articolo` FROM `articoli` 
    		INNER JOIN `associazioni_articoli` ON 
    		`articoli`.`articolo` = `associazioni_articoli`.`id_articolo` 
    		WHERE `articoli`.`assegnato` = 1
    		ORDER BY `articolo` ASC';
    $res = mysql_query($sql)or die(mysql_error());
    $num_rows = mysql_num_rows($res);
    
    print '<pre>';
    while ($row = mysql_fetch_assoc($res)){
    	$art = "
    			SELECT `articolo` , `colonna` , LOWER(`traduzione`) AS `traduzione`, `valore` 
    			FROM `articoli` 
    			LEFT JOIN `traduzioni` ON `articoli`.`colonna` = `traduzioni`.`id` 
    			WHERE `traduzioni`.`lingua` = 1 AND `articoli`.`articolo` = ".$row['articolo']."
    			ORDER BY `articoli`.`articolo` ASC , `traduzioni`.`traduzione` ASC
    		   ";
    #	print $art.'
    ';
    	
    	$ins = "INSERT INTO `temp` (`id`, `articolo`, `altezza`, `asta`, `attacco`, `cavo`, 
    		`codice`, `colore`, `colore_asta`, `colore_corpo`, `colore_diffusore`, `colore_ghiera`, 
    		`colore_led`, `colore_vetro`, `conduttori_cavo`, `dimensioni`, `filettatura`, `ip`, 
    		`isolamento`, `lampade`, `lampadine`, `lunghezza`, `lunghezza_asta`, `lunghezza_flessibile`, 
    		`lunghezza_l`, `misure`, `modello`, `moduli`, `ottica`, `peso_in_kg`, `potenza`, `protezione`, 
    		`riflettore`, `trasformatore`, `uscite`, `vetro`) VALUES 
    		('', '".$row['articolo']."', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '')";
    #	print ''.$ins.'
    ';
    	mysql_query($ins)or die(mysql_error());
    	
    	$r_art = mysql_query($art)or die(mysql_error());
    	while ($w_art = mysql_fetch_assoc($r_art)){
    		$aus = $w_art['traduzione'];
    		$$aus = $w_art['valore'];
    		
    #		print $row['articolo'].' -> '.$aus.' -> '.$$aus.'
    ';
    		$up = "UPDATE `temp` SET `".$aus."` = '".$$aus."' WHERE `articolo` = ".$row['articolo'];
    		mysql_query($up)or die(mysql_error());
    #		print $up.'
    ';
    	}
    	
    
    }
    print '</pre>';
    ?>
    spero possa essere utile a qualcuno!

    Grazie ancora a piero.mac




    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

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.