Snippety do bazy MySQL
Kilka przydatnych podczas korzystania z bazy MySQL kwerend.
MySQLDUMP
Polecenie wykonuje zrzut wybranej bazy danych i zapisuje do pliku
cd C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin
mysqldump -u root -p l2data > d:/l2data.sql
Jeżeli nie mamy zdefiniowanej w systemie zmiennej globalnej dla MYSQL, to na piechotę najpierw musismy przejść do katalogu w którym mamy zainstalowany MySQL.
Kolejna linijka odpala już polecenie mysqldump, (dla użytkownika root bez hasła) dla bazy l2data, a następnie zrzuca strukturę bazy i rekordy do wskazanej lokalizacji.
mysqldump -u root -p --where "1 LIMIT 5000, 5000" database_name table_name > E:/dump_part_2.sql
Aby nie dodawać do każdego pliku kodu tworzącego strukturę tabeli:
mysqldump -u root -p --no-create-info --where "1 LIMIT 5000, 5000" database_name table_name > E:/skills_part_2.sql
$this->db->select('t1.field, t2.field2')
->from('table1 AS t1, table2 AS t2')
->where('t1.id = t2.table1_id')
->where('t1.user_id', $user_id);
SELECT * INTO OUTFILE 'result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM my_table;
load data local infile '/home/loup/whatever.csv' into table myDB.myTab fields terminated by ',' enclosed by '"' lines terminated by '\n';
update fotki set iduzytkownik=(select iduzytkownik
FROM uzytkownicy ORDER BY RAND()
LIMIT 1)
where iduzytkownik = 12345;
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article)
SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article) AS s2
ON s1.article = s2.article AND s1.price = s2.price;
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;
MySQLDUMP
Polecenie wykonuje zrzut wybranej bazy danych i zapisuje do pliku
cd C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin
mysqldump -u root -p l2data > d:/l2data.sql
Jeżeli nie mamy zdefiniowanej w systemie zmiennej globalnej dla MYSQL, to na piechotę najpierw musismy przejść do katalogu w którym mamy zainstalowany MySQL.
Kolejna linijka odpala już polecenie mysqldump, (dla użytkownika root bez hasła) dla bazy l2data, a następnie zrzuca strukturę bazy i rekordy do wskazanej lokalizacji.
Przykład dzielenia dużej tabeli na pliki po 5k rekordów
mysqldump -u root -p --where "1 LIMIT 5000, 5000" database_name table_name > E:/dump_part_2.sql
Aby nie dodawać do każdego pliku kodu tworzącego strukturę tabeli:
mysqldump -u root -p --no-create-info --where "1 LIMIT 5000, 5000" database_name table_name > E:/skills_part_2.sql
Przykład złączenia dwóch tabel w CodeIgniter na bazie Active Record:
$this->db->select('t1.field, t2.field2')
->from('table1 AS t1, table2 AS t2')
->where('t1.id = t2.table1_id')
->where('t1.user_id', $user_id);
Export tabeli MySQL do CSV
SELECT * INTO OUTFILE 'result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM my_table;
Import pliku CSV do tabeli
load data local infile '/home/loup/whatever.csv' into table myDB.myTab fields terminated by ',' enclosed by '"' lines terminated by '\n';
Losowe przypisanie zdjęć należących do użytkownika o id 12345 do innych użytkowników
update fotki set iduzytkownik=(select iduzytkownik
FROM uzytkownicy ORDER BY RAND()
LIMIT 1)
where iduzytkownik = 12345;
Zagnieżdżone zapytanie MySQL 1
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article)
Zagnieżdżone zapytanie MySQL 2 - JOIN
SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article) AS s2
ON s1.article = s2.article AND s1.price = s2.price;
Zagnieżdżone zapytanie MySQL 3 - LEFT JOIN
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;
Brak komentarzy:
Prześlij komentarz