NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
michales
Člen
Avatar
michales:14.6.2015 20:25

Ahoj všem.

Prosím o radu jak by měl vypadat SQL dotaz na UPDATE.
Mám sloupec Text a sloupec t_id

Ve sloupce Text jsou čísla a mohou se opakovat ve sloupci t_id jsou jen jedničky a nuly.
Nyní potřebuji následující update.

Text                t_id

6548                1
79632               1
6548                0 // zde by se měla updatem přepsat 1 protože číslo už v tabulce je a má už jedničku

Takže potřebuji udělat aby se přepsala 0 na 1 pokud v Text už shodné číslo má 1.

Díky za radu.

Odpovědět
14.6.2015 20:25
"Cíle by měly být třešínky na dortech, ne na hromadách hoven."
Avatar
Odpovídá na michales
Michal Štěpánek:15.6.2015 8:55

V jakém jazyce to děláš?

Nahoru Odpovědět
15.6.2015 8:55
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
michales
Člen
Avatar
Odpovídá na Michal Štěpánek
michales:15.6.2015 9:20

Toto bych potreboval udelat primo v databazi v myadminu. Pokud by bylo potreba i php nebranim se

Editováno 15.6.2015 9:21
Nahoru Odpovědět
15.6.2015 9:20
"Cíle by měly být třešínky na dortech, ne na hromadách hoven."
Avatar
Honza
Člen
Avatar
Honza:15.6.2015 12:03

Ahoj, pokud jsem to správně pochopil, tak by měl fungovat tenhle dotaz:

UPDATE t1
SET t1.t_id = 1
FROM myTable AS t1
INNER JOIN myTable AS t2
ON t1.Text = t2.Text AND t2.t_id = 1
WHERE t1.t_id = 0

Ta where podmínka na konci by se dala eventuálně vypustit, ale s ní mi to příjde takové čistší :)

Editováno 15.6.2015 12:04
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
15.6.2015 12:03
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
michales
Člen
Avatar
Odpovídá na Honza
michales:15.6.2015 17:36

Ahoj, díky za pomoc.
Tvůj dotaz by asi i mohl fungovat, ovšem nepřelouská 140 tisíc řádků.
Trvá mu to dlouho a nakonec spadne.

Nahoru Odpovědět
15.6.2015 17:36
"Cíle by měly být třešínky na dortech, ne na hromadách hoven."
Avatar
Honza
Člen
Avatar
Honza:15.6.2015 18:04

A na čem ti běží databáze? 140K řádků by mělo být naprosto bez problémů, pokud to je nějak rozumně oindexované. Nejsem si úplně jistý jestli tenhle dotaz jde ještě nějak výrazně optimalizovat.

Nahoru Odpovědět
15.6.2015 18:04
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
michales
Člen
Avatar
Odpovídá na Honza
michales:15.6.2015 18:06

Mysql, phpmyadmin, endora, asi bude problém s těmi indexi. Řekl bych že nemám index ani na jednom.
Viz:
http://www.jpeg.cz/…15/2limU.png

Editováno 15.6.2015 18:07
Nahoru Odpovědět
15.6.2015 18:06
"Cíle by měly být třešínky na dortech, ne na hromadách hoven."
Avatar
michales
Člen
Avatar
michales:15.6.2015 18:12

Přímo ten tvůj dotaz

UPDATE t1
SET t1.`t_id` = '1'
FROM songs AS t1
INNER JOIN songs AS t2
ON t1.`Text` = t2.`Text` AND t2.`t_id` = '1'
WHERE t1.`t_id` = 0

mi píše
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM songs AS t1
INNER JOIN songs AS t2
ON t1.Text = t2.Text AND t2.t_id' at line 3

Nahoru Odpovědět
15.6.2015 18:12
"Cíle by měly být třešínky na dortech, ne na hromadách hoven."
Avatar
Honza
Člen
Avatar
Odpovídá na michales
Honza:15.6.2015 19:50

Já jsem ten dotaz testoval na MS SQL serveru, takže je možné že na MySQL bude trošku jiná syntaxe. S tím ti ale bohužel neporadím, s MySQL nepracuju. Ale bude to podle mě jen nějaká blbost, jakože ti třeba někde chyběj uvozovky (nebo jsou někde něco navíc) apod. Dotaz jako takový by měl být ok, to je čisté SQL které by mělo fungovat víceméně všude.

Nahoru Odpovědět
15.6.2015 19:50
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Odpovídá na michales
Neaktivní uživatel:15.6.2015 20:12

Ahoj, také přesně nerozumím zadání, ale povedlo se mi udělat toto...

UPDATE tabulka SET tabulka.t_id=0;
UPDATE tabulka SET tabulka.t_id=1-(SELECT COUNT(*) FROM tabulka AS `Foo` WHERE tabulka.Text = Foo.Text AND Foo.t_id=1 );

Nastaví to jedničku, pokud stejný řádek už nemá jedničku, jen si změň název tabulky, protože jsem nevěděl, jak se ta tvoje jmenuje ;)

EDIT: Jedná se o dva dotazy odděleny středníky.

Editováno 15.6.2015 20:13
Nahoru Odpovědět
15.6.2015 20:12
Neaktivní uživatelský účet
Avatar
michales
Člen
Avatar
michales:16.6.2015 19:22

Pridal jsem index na sloupec Text a pouzil trochu pozmenenej dotaz od Honza. Diky za pomoc.

Nahoru Odpovědět
16.6.2015 19:22
"Cíle by měly být třešínky na dortech, ne na hromadách hoven."
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.