perchè stare a perdere tempo con un sql impossibile quando con php lo risolvi in 5 minuti?
perchè stare a perdere tempo con un sql impossibile quando con php lo risolvi in 5 minuti?
io ho fatto una piccola prova su una mia tabella di prova, te la spiego e spero possa tornarti utile in qualche modo, soprattutto se ho capito bene il problema.
La query che mi sono costruito prende dalla tabella la mia colonna1 se questa ha un valore, altrimenti prende la colonna2.
La query è questa:
ma ripeto, non so se ho ben interpretato e capito il tuo problemacodice:SELECT ( CASE WHEN dato1 IS NOT NULL THEN dato1 ELSE dato2 END ) AS datoestratto FROM prova
la query, puoi provarla tranquillamente su una tabella di prova e vedere se fa quello che vuoi, anzi ti posto direttamente il dump della mia così fai prima
codice:-- -- Struttura della tabella `prova` -- CREATE TABLE `prova` ( `id` tinyint(3) unsigned NOT NULL auto_increment, `dato1` varchar(25) default NULL, `dato2` varchar(25) default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=5 ; -- -- Dump dei dati per la tabella `prova` -- INSERT INTO `prova` (`id`, `dato1`, `dato2`) VALUES (1, 'gfdgdfg', NULL), (2, NULL, 'gfdgdfg'), (3, NULL, 'mhjkjhkjk'), (4, 'lopiy', NULL);
facci sapere!![]()
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
Ecco, quello che ha fatto 13manuel84 sarebbe quello che vorrei fare io (credo! Non ho approfondito bene il significato della query visto che non mi è molto chiaro).
Anche la soluzione di daniele_dll va benissimo e ci avevo già pensato ma credevo che sarebbe stato più facile fare tutto con l'sql. Cmq adesso faccio un po' di prove e poi vi faccio sapere come va a finire! Intanto grazie mille a tutti per la pazienza e per le risposte!
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
in effetti la soluzione di manuel potrebbe essere buona il problema è che però il check è da fare su righe diverse e non su colonne diverse
se fosse stato su colonne diverse sarebbe stato abbastanza facile![]()
The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand
Ecco mi sono accorto ora dello stesso problema!Originariamente inviato da daniele_dll
in effetti la soluzione di manuel potrebbe essere buona il problema è che però il check è da fare su righe diverse e non su colonne diverse
se fosse stato su colonne diverse sarebbe stato abbastanza facile![]()
Non mi resta che ciclare in php!
Cmq grazie mille a tutti! Ciao!
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
lolOriginariamente inviato da daniele_dll
in effetti la soluzione di manuel potrebbe essere buona il problema è che però il check è da fare su righe diverse e non su colonne diverse
se fosse stato su colonne diverse sarebbe stato abbastanza facile![]()
allora proprio non avevo colto il problema, chiedo scusa se ho creato confusione![]()
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
non so se sia corretta ma prova questa
Codice PHP:
SELECT catalog_products.name AS name ,
catalog_objects.obj AS obj ,
objectsL.obj AS objL ,
catalog_products.code AS code ,
catalog_brands.brand AS brand ,
brandsL.brand AS brandL ,
materialsL.material AS materialL ,
catalog_products.price AS price ,
catalog_products.discount AS discount ,
catalog_products.availability AS availability ,
catalog_targets.target AS target ,
targetsL.target AS targetL ,
catalog_products.inserted AS inserted ,
catalog_products.views AS views
FROM catalog_products
LEFT JOIN catalog_objects AS objectsL ON objectsL.ref = catalog_products.obj
LEFT JOIN catalog_brands AS brandsL ON brandsL.id = catalog_products.brand
LEFT JOIN catalog_materials AS materialsL ON materialsL.ref = catalog_products.material
LEFT JOIN catalog_targets AS targetsL ON targetsL.ref = catalog_products.target
,catalog_objects,
catalog_brands,catalog_materials,catalog_targets
WHERE catalog_objects.lang = 1 AND objectsL.lang = 2
AND catalog_materials.lang = 1 AND materialsL.lang = 2
AND catalog_targets.lang = 1 AND targetsL.lang = 2
AND catalog_brands.lang = 1 AND brandsL.lang = 2
AND catalog_objects.ref = catalog_products.obj
AND catalog_brands.id = catalog_products.brand
AND catalog_materials.ref = catalog_products.material
AND catalog_targets.ref = catalog_products.target
Fatte le dovute modifiche (brands non è multilingua poichè contiene le marche che non sono multilingua!) funziona nel senso che estrae i dati in entrambe le lingue e quindi mi faciliterebbe il lavoro in php.
Onestamente adesso non sto lavorando a questo problema e quindi non so dirti se sia utile o meno (sicurament lo sarà per una mia conoscenza personale visto che query del genere non ne ho veramente mai viste!VVoVe: ).
Cmq vi farò sapere come ho risolto il problema quando l'avrò risolto! Grazie cmq per l'impegno ma a questo punto credo ci vorrà un po' prima che possa aggiornarvi visto che dovrò prima capire questa query come funziona e poi potrò dirvi come è andata!![]()
A presto (speriamo!)
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Salve ragazzi. Eccomi di nuovo qui. Allora, a query l'ho modificata per le mie esigenze. Solo che ho aggiunto un'altra tabella che dovrebbe contenere le keywords ma la query non funziona. Vi posto il codice della query ed il dump delle tabelle così potete provare anche voi la query:
query
dump dbCodice PHP:
// $id = 1 -> id prodotto pronto per provare
$id = 1 ;
$lang = 1 ; //-> italiano
//$lang = 2 ; //-> inglese
$query = "SELECT catalog_products.id AS id ,
catalog_products.name AS name ,
catalog_objects.obj AS obj ,
objectsL.obj AS objL ,
catalog_products.code AS code ,
catalog_brands.brand AS brand ,
catalog_materials.material AS material ,
materialsL.material AS materialL ,
catalog_products.price AS price ,
catalog_products.discount AS discount ,
catalog_products.avStatus AS avStatus ,
catalog_targets.target AS target ,
targetsL.target AS targetL ,
catalog_products_description.description AS description ,
descriptionL.description AS descriptionL ,
catalog_products_keys.keys AS keys ,
keysL.keys AS keysL ,
catalog_products.inserted AS inserted ,
catalog_products.views AS views
FROM catalog_products
LEFT JOIN catalog_objects AS objectsL ON objectsL.ref = catalog_products.obj
LEFT JOIN catalog_brands AS brandsL ON brandsL.id = catalog_products.brand
LEFT JOIN catalog_materials AS materialsL ON materialsL.ref = catalog_products.material
LEFT JOIN catalog_targets AS targetsL ON targetsL.ref = catalog_products.target
LEFT JOIN catalog_products_description AS descriptionL ON descriptionL.product = catalog_products.id
LEFT JOIN catalog_products_keys AS keysL ON keysL.product = catalog_products.id , catalog_objects , catalog_brands , catalog_materials , catalog_targets , catalog_products_description , catalog_products_keys
WHERE catalog_objects.lang = '$lang'
AND objectsL.lang = 1
AND catalog_materials.lang = '$lang'
AND materialsL.lang = 1
AND catalog_targets.lang = '$lang'
AND targetsL.lang = 1
AND catalog_objects.ref = catalog_products.obj
AND catalog_materials.ref = catalog_products.material
AND catalog_targets.ref = catalog_products.target
AND catalog_products.id = $id" ;
$result = mysql_query( $query ) or die(mysql_error());
$prod = mysql_fetch_array( $result ) or die(mysql_error()) ;
$product['id'] = $prod['id'] ;
$product['name'] = $prod['name'] ;
$product['obj'] = ( $prod['obj'] != '' ) ? $prod['obj'] : $prod['objL'] ;
$product['code'] = $prod['code'] ;
$product['brand'] = $prod['brand'] ;
$product['material'] = ( $prod['material'] != '' ) ? $prod['material'] : $prod['materialL'] ;
$product['price'] = $prod['price'] ;
$product['discount'] = $prod['discount'] ;
$product['avStatus'] = $prod['avStatus'] ;
$product['target'] = ( $prod['target'] != '' ) ? $prod['target'] : $prod['targetL'] ;
$product['description'] = ( $prod['description'] != '' ) ? $prod['description'] : $prod['descriptionL'] ;
$product['keys'] = ( $prod['keys'] != '' ) ? $prod['keys'] : $prod['keys'] ;
$product['inserted'] = $prod['inserted'] ;
$product['views'] = $prod['views'] ;
print_r( $product) ;
E' un po' lungo ma vi basta fare copia e incolla!codice:-- -- Struttura della tabella `catalog_branch` -- CREATE TABLE `catalog_branch` ( `id` int(10) NOT NULL auto_increment, `tree_id` int(10) NOT NULL default '0', `name` varchar(255) NOT NULL default '', `lang` int(10) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ; -- -- Dump dei dati per la tabella `catalog_branch` -- INSERT INTO `catalog_branch` VALUES (1, 1, 'Gioielli', 1); INSERT INTO `catalog_branch` VALUES (2, 1, 'Jewels', 2); INSERT INTO `catalog_branch` VALUES (3, 2, 'Anelli', 1); INSERT INTO `catalog_branch` VALUES (4, 2, 'Rings', 2); INSERT INTO `catalog_branch` VALUES (5, 3, 'Bracciali', 1); INSERT INTO `catalog_branch` VALUES (6, 3, 'Bracelets', 2); INSERT INTO `catalog_branch` VALUES (7, 4, 'Cavigliere', 1); INSERT INTO `catalog_branch` VALUES (8, 4, 'Ankle Supports', 2); INSERT INTO `catalog_branch` VALUES (9, 5, 'Ciondoli', 1); INSERT INTO `catalog_branch` VALUES (10, 5, 'Pendants', 2); INSERT INTO `catalog_branch` VALUES (11, 6, 'Diamanti', 1); INSERT INTO `catalog_branch` VALUES (12, 6, 'Diamonds', 2); INSERT INTO `catalog_branch` VALUES (13, 7, 'Fedi', 1); INSERT INTO `catalog_branch` VALUES (14, 7, 'Wedding Rings', 2); INSERT INTO `catalog_branch` VALUES (15, 8, 'Gemelli', 1); INSERT INTO `catalog_branch` VALUES (16, 8, 'Cuff Links', 2); INSERT INTO `catalog_branch` VALUES (17, 9, 'Girocolli', 1); INSERT INTO `catalog_branch` VALUES (18, 9, 'Necklaces', 2); INSERT INTO `catalog_branch` VALUES (19, 10, 'Orecchini', 1); INSERT INTO `catalog_branch` VALUES (20, 10, 'Earrings', 2); INSERT INTO `catalog_branch` VALUES (21, 11, 'Portachiavi', 1); INSERT INTO `catalog_branch` VALUES (22, 11, 'Key Holders', 2); INSERT INTO `catalog_branch` VALUES (23, 12, 'Spille', 1); INSERT INTO `catalog_branch` VALUES (24, 12, 'Brooches', 2); -- -------------------------------------------------------- -- -- Struttura della tabella `catalog_brands` -- CREATE TABLE `catalog_brands` ( `id` int(10) NOT NULL auto_increment, `brand` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Dump dei dati per la tabella `catalog_brands` -- INSERT INTO `catalog_brands` VALUES (1, 'Morellato'); -- -------------------------------------------------------- -- -- Struttura della tabella `catalog_materials` -- CREATE TABLE `catalog_materials` ( `id` int(10) NOT NULL auto_increment, `ref` int(10) NOT NULL default '0', `material` varchar(255) NOT NULL default '', `lang` int(10) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; -- -- Dump dei dati per la tabella `catalog_materials` -- INSERT INTO `catalog_materials` VALUES (1, 1, 'Acciaio e diamanti', 1); INSERT INTO `catalog_materials` VALUES (2, 1, 'Steel and diamonds', 2); INSERT INTO `catalog_materials` VALUES (3, 2, 'Acciaio, oro e diamanti', 1); INSERT INTO `catalog_materials` VALUES (4, 2, 'Steel, gold and diamonds', 2); INSERT INTO `catalog_materials` VALUES (5, 3, 'Acciaio ed oro', 1); INSERT INTO `catalog_materials` VALUES (6, 3, 'Steel and gold', 2); -- -------------------------------------------------------- -- -- Struttura della tabella `catalog_objects` -- CREATE TABLE `catalog_objects` ( `id` int(10) NOT NULL auto_increment, `ref` int(10) NOT NULL default '0', `obj` varchar(255) NOT NULL default '', `lang` int(10) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; -- -- Dump dei dati per la tabella `catalog_objects` -- INSERT INTO `catalog_objects` VALUES (1, 1, 'Anello', 1); INSERT INTO `catalog_objects` VALUES (3, 1, 'Ring', 2); INSERT INTO `catalog_objects` VALUES (4, 2, 'Ciondolo', 1); INSERT INTO `catalog_objects` VALUES (5, 2, 'Pendant', 2); INSERT INTO `catalog_objects` VALUES (6, 3, 'Collana', 1); INSERT INTO `catalog_objects` VALUES (7, 3, 'Necklace', 2); -- -------------------------------------------------------- -- -- Struttura della tabella `catalog_products` -- CREATE TABLE `catalog_products` ( `id` int(20) NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', `obj` int(10) NOT NULL default '0', `code` varchar(255) NOT NULL default '', `brand` int(10) NOT NULL default '0', `material` int(10) NOT NULL default '0', `price` decimal(10,2) NOT NULL default '0.00', `discount` int(2) NOT NULL default '0', `avAmount` int(10) NOT NULL default '0', `avStatus` int(1) NOT NULL default '0', `avFrom` varchar(255) NOT NULL default '', `target` int(2) NOT NULL default '0', `inserted` varchar(255) NOT NULL default '', `lastModified` varchar(255) NOT NULL default '', `lastSale` varchar(255) NOT NULL default '', `views` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; -- -- Dump dei dati per la tabella `catalog_products` -- INSERT INTO `catalog_products` VALUES (1, '', 2, 'S01 5201', 1, 1, 65.00, 0, 1, 1, '1143410400', 2, '1136928649', '1136928649', '', 0); INSERT INTO `catalog_products` VALUES (2, 'Anello ciao', 2, 'S01 5202', 1, 1, 65.00, 0, 1, 1, '1143410400', 2, '1136928650', '1136928650', '', 0); INSERT INTO `catalog_products` VALUES (3, '', 2, 'S01 5301', 1, 3, 94.00, 0, 1, 1, '1143410400', 2, '1136928651', '1136928651', '', 0); INSERT INTO `catalog_products` VALUES (4, '', 2, 'S01 5302', 1, 1, 94.00, 0, 1, 1, '1143410400', 2, '1136928652', '1136928652', '', 0); INSERT INTO `catalog_products` VALUES (5, '', 2, 'S01 5303', 1, 1, 78.00, 20, 1, 2, '', 2, '1136928653', '1136928653', '', 0); INSERT INTO `catalog_products` VALUES (6, '', 2, 'S01 5501', 1, 1, 58.00, 0, 1, 2, '', 2, '1136928654', '1136928654', '', 0); INSERT INTO `catalog_products` VALUES (7, '', 2, 'S01 5502', 1, 1, 58.00, 0, 1, 3, '', 2, '1136928655', '1136928655', '', 0); INSERT INTO `catalog_products` VALUES (8, '', 2, 'S01 5503', 1, 1, 58.00, 0, 1, 3, '', 2, '1136928656', '1136928656', '', 0); INSERT INTO `catalog_products` VALUES (9, '', 2, 'S01 8906P', 1, 1, 75.00, 30, 1, 3, '', 2, '1136928657', '1136928657', '', 0); INSERT INTO `catalog_products` VALUES (10, '', 3, 'S01 5919C', 1, 3, 75.00, 0, 1, 4, '', 2, '1136928658', '1136928658', '', 0); INSERT INTO `catalog_products` VALUES (11, '', 2, 'S01 9503P', 1, 1, 95.00, 0, 1, 4, '', 2, '1136928659', '1136928659', '', 0); -- -------------------------------------------------------- -- -- Struttura della tabella `catalog_products_description` -- CREATE TABLE `catalog_products_description` ( `id` int(11) NOT NULL auto_increment, `product` int(11) NOT NULL default '0', `description` text NOT NULL, `lang` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; -- -- Dump dei dati per la tabella `catalog_products_description` -- INSERT INTO `catalog_products_description` VALUES (1, 1, 'Vediamo se funziona in italiano', 1); -- -------------------------------------------------------- -- -- Struttura della tabella `catalog_products_keys` -- CREATE TABLE `catalog_products_keys` ( `id` int(11) NOT NULL auto_increment, `product` int(11) NOT NULL default '0', `keys` text NOT NULL, `lang` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Dump dei dati per la tabella `catalog_products_keys` -- INSERT INTO `catalog_products_keys` VALUES (1, 1, 'ciondolo morellato della marca del cazzo perchè non la smetti di rompermi i coglioni brutto faccia di cazzo bastardo e imprudente', 1); -- -------------------------------------------------------- -- -- Struttura della tabella `catalog_targets` -- CREATE TABLE `catalog_targets` ( `id` int(10) NOT NULL auto_increment, `ref` int(10) NOT NULL default '0', `target` varchar(255) NOT NULL default '', `lang` int(10) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; -- -- Dump dei dati per la tabella `catalog_targets` -- INSERT INTO `catalog_targets` VALUES (1, 1, 'Uomo', 1); INSERT INTO `catalog_targets` VALUES (2, 1, 'Man', 2); INSERT INTO `catalog_targets` VALUES (3, 2, 'Donna', 1); INSERT INTO `catalog_targets` VALUES (4, 2, 'Woman', 2); INSERT INTO `catalog_targets` VALUES (5, 3, 'Bambino', 1); INSERT INTO `catalog_targets` VALUES (6, 3, 'Child', 2); INSERT INTO `catalog_targets` VALUES (7, 4, 'Unisex', 1); INSERT INTO `catalog_targets` VALUES (8, 4, 'Unisex', 2);
E' tutto pronto per provare. fate un file e copiateci dentro la parte in php, fate il dump del db e provate la query. Spero che qualcuno possa aiutrami! Grazie mille! Ciao!
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Ho dato una occhiata alla query (post prandiale) quindi con un occhio solo... ma occhiousi delle parole riservate come "keys" come nome campo e nome alias.
e' poi inutile ripetere lo stesso nome come alias. Lo prenderebbe gia' di suo....
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.