Apr 19 2011

MySql: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication

Problem:
Prilikom spajanja na mysql bazu php javlja grešku u konekciji:

mysqlnd cannot  connect to MySQL 4.1+ using the old insecure authentication. Please use  an administration tool to reset your password with the command SET  PASSWORD = PASSWORD('your_existing_password'). This will store a  new, and more secure, hash value in mysql.user. If this user is used in  other scripts executed by PHP 5.2 or earlier you might need to remove  the old-passwords flag from your my.cnf file

Rješenje:
Updejtamo stari password istim takvim pomoću sljedeće naredbe:

UPDATE mysql.user SET Password=PASSWORD('lozinka') WHERE User='korisnik';

FLUSH PRIVILEGES;

Apr 14 2011

MySql: “if null then zero”

Problem:

Query nam vraća null, a nama treba nula

Rješenje:

1. IFNULL

SELECT IFNULL(fieldName, 0) as fieldName FROM... 

2.COALESCE

SELECT COALESCE(fieldName, 0) as fieldName FROM... 

COALESCE je zanimljiv iz još jednog razloga. Recimo da u bazi osoba imamo osim imena i prezimena također i podatke o službenom i privatnom telefonu i mobitelu.
Budući da COALESCE traži prvu pojavu vrijednosti koja nije null na sljedeći način možemo pretraživati više polja:
COALESCE(sluzbeni_telefon, privatni_telefon, službeni_mobitel, privatni_mobitel, ‘Nema kontakt telefona’)
Ako postoji službeni telefon selektirat će ga, a ako ne prelazi na privatni.
Ako ni on ne postoji prelazi na službeni mobitel itd…
ako ništa od navedenog ne postoji ispisuje ‘nema kontakt telefona’…

Kako riješiti problem praznog stringa kod funkcije COALESCE ?

Evo jednog od rješenja: http://systasis.biz/blog/?p=89


Apr 12 2011

MS SQL: Order by prema broju ako je dio stringa broj

Problem:

selektirane podatke poredati (ORDER BY) kao da su brojevi iako je samo dio vrijednosti broj

npr. recimo da se polje prema kojem želimo poredati rezultat zove “mojeMijesanoPolje”

pero2peric
pero3peric
pero1peric

treba biti:

pero1peric
pero2peric
pero3peric

Rješenje:

Iako postoji i drugih rješenja ovo mi se čini baš “šeretski”…

1. napravimo funkciju kao što to kaže dobra duša na http://bendynet.com/it/ms-sql-functions-to-parse-int-or-alpha-characters/

<code>SET ANSI_NULLS ON
 GO
 SET QUOTED_IDENTIFIER ON
 GO
 CREATE FUNCTION [dbo].[parseInt]
 (
 @string VARCHAR(8000)
 )
 RETURNS VARCHAR(8000)
 AS
 BEGIN
 DECLARE @IncorrectCharLoc SMALLINT
 SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string)
 WHILE @IncorrectCharLoc > 0
 BEGIN
 SET @string = STUFF(@string, @IncorrectCharLoc, 1, '')
 SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string)
 END
 SET @string = @string
 RETURN @string
 END</code>

2. primijenimo:

 ... ORDER BY dbo.parseInt(mojeMijesanoPolje) ASC

3. Još to nije to, zar ne!? S ovim gore samo smo izvukli broj iz stringa ali i taj broj je još uvijek string. Rješenje je CAST:

... ORDER BY CAST(dbo.parseInt(mojeMijesanoPolje) AS int) ASC

Apr 10 2011

MySQL: UPDATE tablice bez primary key-a

Vjerojatno i mali šmrkljavi Miro iz 6-tog B zna da UPDATE tablice bez primary key-a redovno dovodi do nepredviđenih i nimalo poželjnih rezultata.

Izgleda da nekima ni 7 godina prakse nije dovoljno da to nauče!

Dakle, kakav kreten!

Al dobro… rano je…


Apr 6 2011

MySql: pronalaženje duplikata

Problem:

Kako saznati koji se podaci u koloni pojavljuju više od jednom

Rješenje:

SELECT * FROM tableName GROUP BY fieldName1, fieldName2 HAVING COUNT(*)>1

Apr 5 2011

MySql: polje LIKE drugo polje

Problem:

Napraviti query gdje je vrijednost polja LIKE vrijednost drugog polja

Rješenje:

SELECT fieldName1, fieldName2 FROM tableName WHERE fieldName1 LIKE CONCAT('%', fieldName2, '%')
fieldName1

Apr 5 2011

MS SQL: “if null then zero”

Problem:

Query nam vraća null, a nama treba nula

Rješenje:

Select coalesce(fieldName,0) as broj

ili

Select (case when fieldName is null then 0 else fieldName end)) as broj

ili

Select (IsNull(fieldName,0)) as broj

Apr 5 2011

MS SQL: replace funkcija

Problem:

Potrebno je maknuti ili zamijeniti karakter (ili više njih) unutar SQL query-a

Rješenje:

SELECT REPLACE(fieldName,'x','') AS rezultat FROM tableName

Ovo daje vrijednost polja fieldName gdje je slovo x zamijenjeno ničime, tj. x je izostavljen

SELECT REPLACE(fieldName,'x','y') AS rezultat FROM tableName

Ovo daje vrijednost polja fieldName gdje je slovo x zamijenjeno slovom y