 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
Ice_Man
Data înscrierii: 24/Oct/2004
Mesaje: 23
|
| Trimis: Mie Feb 23, 2005 10:59 pm Titlul subiectului: problema de `gandire` in mysql |
|
|
Sa da un site, X, foarte vizitat!
E nevoie de o solutie de a face urmatorul lucru in cel mai scurt timp posibil:avem o tabela cu 3 campuri C1 (id-ul), C2 si C3.
Se cere: Selectarea din baza de date a campurilor, si eliminarea celor asemenea (sa zicem ca avem: C1=1;C2=2;C3=3 ;; C1=2;C2=2;C3=3). In cazul asta, il eliminam pe C1=2;C2=2;C3=3, fara a lua in calcul campul C1.
PS: varianta cu a se mai adauga o coloana C4=C1 se exclude; la fel si construierea unor array-uri, sortandu-le in php si comparandu-le=>timp de executie prea mare...
Solutii?? |
|
| Sus |
|
aolex
Data înscrierii: 17/Dec/2004
Mesaje: 662
|
| Trimis: Joi Feb 24, 2005 12:09 am Titlul subiectului: |
|
|
nu stiu daca am inteles bine ce vrei dar poate asta te ajuta :
Cod: SELECT DISTINCT column_name(s)
FROM table_name
e luata de pe w3schools :) |
|
| Sus |
|
w31rd0
Data înscrierii: 15/Mar/2004
Mesaje: 165
Locație: Timisoara
|
| Trimis: Joi Feb 24, 2005 8:53 am Titlul subiectului: |
|
|
nu stiu nici eu daca am inteels ce vrei tu, insa la un moemtn dat am avut o problema asemanatoare, trebuie sa sterg toate inregisterile dintr-o tabela care au aceleasi date in toate campurile, si o diferenta mai mica de 10 sec in campul DATETIME.
M-am chinuit la vremea aia sa fac un query mai complex (era cu GROUP BY), si mergea destul de greu. Am facut apoi select, si am parcurs in php, si am facut delete pentru fiecare inreg dubla si a mers mult mai repede, chestia este ca varianta a 2-a se putea optimiza cu index pe tabela, prima nu, asa ca uneori varianta mai simpla poate fi cea buna, chiar si acuma aplicatia merge "bine", si are cateva sute de tabele si milioane de records. |
|
| Sus |
|
Zamolxe
Data înscrierii: 14/Ian/2003
Mesaje: 126
Locație: Bucharest
|
| Trimis: Sâm Feb 26, 2005 3:24 pm Titlul subiectului: re |
|
|
am comentat codul sql. queryurile pot fi rulate ca unul singur, rezultatul este un tabel cu rezultate unice.
exista mai multe metode de scos duplicatele, totusi iti recomand sa folosesti chei unice (UNIQUE)
Cod:
##################################################################
CREATE TABLE `table` (
`c1` int(10) unsigned NOT NULL auto_increment,
`c2` varchar(10) NOT NULL default '',
`c3` varchar(10) NOT NULL default '',
KEY `c1` (`c1`)
) ENGINE=MyISAM;
#
# Dumping data for table `table`
#
INSERT INTO `table` VALUES (1, 'serban', 'google');
INSERT INTO `table` VALUES (2, 'eugen', 'verasys');
INSERT INTO `table` VALUES (3, 'dragos', 'verasys');
INSERT INTO `table` VALUES (4, 'popescu', 'microsoft');
INSERT INTO `table` VALUES (5, 'serban', 'cisco');
INSERT INTO `table` VALUES (6, 'serban', 'google');
INSERT INTO `table` VALUES (7, 'ionescu', 'dell');
INSERT INTO `table` VALUES (8, 'popescu', 'microsoft');
INSERT INTO `table` VALUES (9, 'popescu', 'microsoft');
######################################
#query care scoate duplicatele dintr-un tabel#
######################################
#creez tabel temporar `goodtable`
CREATE TABLE `goodtable` (
`c1` int(10) unsigned NOT NULL auto_increment,
`c2` varchar(10) NOT NULL default '',
`c3` varchar(10) NOT NULL default '',
KEY `c1` (`c1`)
) ENGINE=MyISAM;
#inserez valorile unice din `table` (tabela initiala) in `goodtable`
INSERT INTO `goodtable`
SELECT `table`.`c1`,
`table`.`c2`,
`table`.`c3`
FROM `table`
GROUP BY `table`.`c2`, `table`.`c3`
ORDER BY `table`.`c1`;
#golesc tabela `table`
TRUNCATE TABLE `table`;
#inserez datele din unice din `goodtable` in `table`
INSERT INTO `table`
SELECT * FROM `goodtable`
ORDER BY `c1` ASC;
#sterg tabela `goodtable`
DROP TABLE `goodtable`;
|
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|