1 Востаннє редагувалося Анатолій (19.03.2016 15:59:06)

Тема: Вивчаю базу даних MySql

Конспект навчання "Ситема Керування Базою Даних MySQL"
Ціль

- Навіщо взагалі вчити програмування?
    Відповідь на це запитання аргументується слідуючим: Є замовлення на виконанання веб-проектів з приємною оплатою праці; так, якщо брати один з ресурсів Elance , то там досить легко можна віднайти оплату за веб-програмування від 100 долларів і вище 1000, 2500...
так цікава стаття про розмір оплат праці
US salary

Приємна ціль
    Приємно ділити шкіру не вбитого ведмедя, але ж... :) Якщо мати ціль отримувати гідну оплату своєї праці => тоді, наприклад, можна побудувати власний будинок. Просторий, чистий, приємний будинок в тому місці, де тобі буде приємно бути. Можна мандрувати світом зі своєю сім'єю. Можна володіти авто, напевно теж відносно хорошим :)

Переваги програмування.
    Приємним моментом роботи з веб-проектами/програмуванням, все залежить лише від тебе. Ти вільний розпоряджатись своїм робочим часом; працюєш стільки скільки вважаєш за потрібне. І значним плюсом всього цього є також відсутність адміністративної системи ("бюрократів") :) . You are free!!! Ти вільний в свій день народження і ти вільний, коли ти мандруєш світом.

- Що для цього потрібно?

http://не-дійсний-домен/pictures_04/become_programmer_004.jpg

    Спочатку я собі думав зможу виконувати замовлення самостійно, але ж об'єм робіт для одного виконавця досить великий. Розпочинаючи від розробки стилю дизайну сайту плюс всі проміжні елементи веб-проекту (анімація, створення контактів, наповнення матеріалом,...), тобто необхідно використовувати значну кількість ресурсів HTML, CSS, javascript, jQuery, PHP, MySQL і інші екслюзивні моменти на зразок оптимізації сайту, веб-захисту ресурсу. Тоді я припустив, що логічно було б досконало вивчити один напрямок веб-програмування і працювати в колективі...
    Одним з основних інструментів для веб-програмування є необхідність знань англійської мови. Це звичайно не легке завдання оволодіти англійським, але ж кінцева ціль того варта.
By the way, if you want learn English you can try

    А якщо працювати в колективі, то звичайно потрібно також вміти працювати з програмами спільної роботи , щось на зразок GitHub, BitBuket, etc...


Мій власний сайт, де я колекціоную свої знання з MySql

Конспект з MySQL

http://не-дійсний-домен/ForumReplace/teach_mysql.jpg

Поелементна структура MySQL
Для того, щоб бачити картину "Система Керування Базою Даних MySQL" в цілому потрібно виділити основні елементи напрямку, включаючи програмне забезпечення, залізо, середовище застосування і таке інше....
Досліджуєм MySQL

http://не-дійсний-домен/picture/find_structure_02.jpg


Основні поняття та терміни в сфері Системи Керування Базою Даних MySQL.
Глосарій

http://не-дійсний-домен/picture/glossary_01.jpg

Основи Бази Даних

Хороший ресурс з прикладами запитів http://www.w3schools.com/sql/, я дещо переклав на українську мову і загальні посилання по кожному з елементів SQL-виразів залишив на сторінці
"Перелік та приклади використання SQL-запитів"

http://не-дійсний-домен/picture/sql_list.jpg



Вибираємо дані із Бази даних

1. Результуюча вибірка та асоціативний масив
(для початківців точно буде корисним)
Знайомство з вибіркою даних функції fetch... та інше

http://не-дійсний-домен/pictures_06/DBMS.png

2. Шаблон вибірки даних з таблиць Бази Даних,

1. Загальні положення, структура основних блоків при виведенні даних з БД
2. Патерн вибору даних з БД
Розглянемо наступні варіанти вибору даних:
2.1. Вибір одного запису таблиці
2.2. вибір масиву даних (колонка, атрибут)
2.3. вибір асоціативного масиву даних (рядок, кортеж), де дані представлені одним рядком
2.4. вибір асоціативного масиву даних (рядок, кортеж), де дані представлені декількома рядками

http://не-дійсний-домен/picture/select_07.jpg


Задачі MySQL

Приклади задач SQL

Одним з хороших методів навчання основам роботи з Базами Даних є звичайно розв'язування задач з SQL. В даному розділі планую розглянути різний спектр задач та їх вирішення з описом основних SQL-елементів.

http://не-дійсний-домен/picture/fon_tasks.jpg


Корисні матеріали

В кожній науковій розробці має бути список використаної літератури. Це є корисним як для автора напрацювань, так і зацікавлених особистостей...

Офіційний MySQL :)
Офіційний php. Database MySqli.
Навчальний ресурс по основам Mysql w3schools.com
Навчальний ресурс по Базам Даних techonthenet.com
Навчальний ресурс  mysqltutorial.org
Навчальний ресурс sqlcourse2.com
HeidiSQL Програма роботи з БД

Скачати посібник Г.А.Гайна Основи проектування Баз Даних


http://не-дійсний-домен/picture/usefull_link.png

Подякували: Betterthanyou, TakeAction, leofun013

2

Re: Вивчаю базу даних MySql

Я тут залишу свої міркування по цій тематиці.
За технічну грамотність перепрошую.
Мені подобається розумне пояснення тематики :). Є таке поняття як "Реляційна модель даних"
У реляційній моделі досягається більш високий рівень абстракції даних, ніж в ієрархічній або мережевій. У згаданій статті Е. Ф. Кодда стверджується, що «реляційна модель надає засоби опису даних на основі тільки їх природної структури, тобто без потреби введення якоїсь додаткової структури для цілей машинного представлення». Іншими словами, подання даних не залежить від способу їх фізичної організації. Це забезпечується за рахунок використання математичного поняття відношення (сама назва «реляційна» походить від англійського relation — «відношення»).

прочитав і відразу все стало зрозуміло :) :) :). От йоли.... я раптом не перепутав з тематикою "кольорові люди" за напрямком теорія біопсихосоціальних станів суспільства

3

Re: Вивчаю базу даних MySql

Читайте вступ до розумних книг після того, як прочитаєте вміст :)
Поки що, в двох словах, ситуація така: в людей є дані. Багато. Їх треба якось зберігати, причому так, щоб комп'ютер міг їх обробляти. Під час вирішення цієї задачі напрацьовано багато практик, які зводяться до поняття "реляційна база даних". Коротко:
- одиниця інформації зветься "відношенням", наприклад "Існує особа з іменем Іван, прізвищем Шевченко і телефоном 123456789" - це відношення між іменем "Іван", прізвищем "Шевченко" і телефоном "12345679";
- відношення мають зберігатися в таблицях, де рядки - конкретні відношення, а стовбчики - однотипні дані (імена і прізвища, наприклад);
- таблиці мають задовольняти певним нормам ("нормальним формам");
- говнокодерам не дають прямо лізти кривими ручками в таблиці, а надають інтерфейс із формалізованою мовою запитів (SQL); все решта - пошук, файли, контроль цілісності - організовує СУБД самостійно чи за загальними підказками.
От останній пункт і означає, що "подання даних не залежить від способу їх фізичної організації".

Подякували: quez, Анатолій2

4

Re: Вивчаю базу даних MySql

koala написав:

- говнокодерам не дають прямо лізти кривими ручками в таблиці, а надають інтерфейс із формалізованою мовою запитів (SQL); все решта - пошук, файли, контроль цілісності - організовує СУБД самостійно чи за загальними підказками.
От останній пункт і означає, що "подання даних не залежить від способу їх фізичної організації".

дякую, я розберусь, просто як перший раз бачиш Боїнг, кажеш "-Ва-у, апарат...",
тут теж читаєш , "-О, прикольно придумали....".
Реляційна, той реляційнв система представлення даних, якщо народ порішав, що це є досить хороший спосіб представлення даних, нехай так і буде...
в Тебе дещо доступніше пряміше подана інформація, так мені більше до вподоби, а  то... "міжпросторовий куклоїдний екстрополярний апофеоз комірки інформації  в сукупонсті з ментальним сприйняттям субстанції елемента індівідіума не індоферентний до сприйняття" :)

5

Re: Вивчаю базу даних MySql

Може хто підказати. Керування даними з двох місць.
1. Система Керування базою даних MySQL. Керувати даними на сервері бази даних можна за допомогою phpmyadmin. Я так розумію phpmyadmin знаходиться на веб-сервері.
2. А ось другий варіант саме мене і цікавить, з домашнього комп'ютера, я так розумію це віддалений доступ, необхідно  вдома встановити програмку. Може хтось підказати хороший варіант?

6 Востаннє редагувалося ktretyak (08.11.2014 14:40:37)

Re: Вивчаю базу даних MySql

Що до віддаленого доступу, та й взагалі для зручного доступу до MySQL, то рекомендую Heidisql (для користувачів Windows) - це безкоштовний редактор (навіть український переклад інтерфейса є, але дуже неякісний, краще використовувати англійський).

Подякували: Анатолій1

7

Re: Вивчаю базу даних MySql

php- кодування http://php.net/manual/en/mysqli.quickst … ements.php

<?php
$mysqli = new mysqli("example.com", "user", "password", "database"); - з'єднання з базою даних
$res = $mysqli->query("SELECT id FROM test ORDER BY id ASC"); - що за тип даних $res???
?>

як би так усвідомити, що значить $mysqli та $res?
$mysqli - змінна чи якісь буферні чи  кешовані дані php, що в вказує, що Є з'єднання з базою даних
$res - php змінна, що собою являє????...масив, що зберігає набір даних запиту SELECT з бази даних


echo "Reverse order...\n";
for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--) {
    $res->data_seek($row_no);
    $row = $res->fetch_assoc();
    echo " id = " . $row['id'] . "\n";

як зрозуміти умову циклу for?
Тут теж використовується $res, це що одна цифра може бути?
Змінна $row_no- приймає значення $res->num_rows мінус один, доки більше нуля виводити дані з.... ??? масиву $row, який утворений з $res за допомогою fetch_assoc().
Ну і звичайно $row_no-- зменшити на одиницю

8

Re: Вивчаю базу даних MySql

Вам це не зрозуміло, бо ви починаєте "з середини", а не з початку вчити PHP.
Дуже багато відповідей в інтернеті на задані вами питання... Хоча думаю вам навіть не потрібно буде щось шукати, бо в документації все чітко говориться, наприклад, взяти хоча б цикл for()...

9 Востаннє редагувалося VTrim (17.11.2014 23:26:25)

Re: Вивчаю базу даних MySql

$mysqli - це обєкт класу mysqli
$res - зберігає дані вибірки з бд.
for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--)
$row_no = $res->num_rows - 1; кількість рядків в бд (з запиту в $res)
data_seek($row_no) - перехід до певного рядка

Вся суть в тому,що вибірка буде іти знизу вверх (від кількості рядків в бд по результату до 0).
З кожним проходом циклу,$row_no буде зменшуватись на 1
100
99
98
97
і т.д
...
0

10

Re: Вивчаю базу даних MySql

питання роботи циклу for ясно як білий день, він виконує дію доки виконується умова.
програмування в своїй основі теж елементарне, скрізь логіка.
мене цікавить що це таке $res->num_rows ?
що це таке $res = $mysqli->query ()
якщо брати елементарні приклади, то:
$res = 100; - змінній $res присвоєно значення 100 - тип даних integer - одна цифра
$res = "Hello" - змінній $res присвоєно строкову дані "Привіт"- тип даних string і так далі.....
в контексті роботи з базами даних, власне що я і хотів би зрозуміти,  $res = $mysqli->query ()
тут змінній  $res присвоюється (тому що = ) значення чого....??? $mysqli->query("SELECT id FROM test ORDER BY id ASC"). Зрозуміло, що SELECT вибирає дані з таблиць бази даних (не суттєво яких, вибірка згідно запиту SQL), тобто вона може наприклад вибрати і, наприклад, 20 числових значень, може вибрати з таблиці 20 числових 20 строкових, 20 значень типу логіка і тому подібне.
Тоді я так зрозумів, що змінна $res масив даних

11 Востаннє редагувалося VTrim (17.11.2014 23:51:46)

Re: Вивчаю базу даних MySql

$res - це обєкт mysqli_result.
$res->num_rows - звернення до властивості (num_rows) цього обєкту.

Подякували: Анатолій1

12

Re: Вивчаю базу даних MySql

VTrim написав:

$res - це об'єкт mysqli_result.
$res->num_rows - звернення до властивості (num_rows) цього об'єкту.

Добре погоджуюсь, що в даному випадку $mysqli і $res будуть обидва об'єкти. і добре нехай буде $res->num_rows - властивість об'єкту :) - це мені важливо

далі, просто, якщо $res - об'єкт (масив даних) (для прикладу на малюнку)зберігає дані, то частина кодування в циклі for  $row_no = $res->num_rows - 1 виділене розуміється як "з об'єкту(масиву) вибрати кількість рядків"
тобто в циклі for потрібно розуміти для змінної $row_no перше значення присвоїти кількість рядків мінус один (я так розумію записи в таблицю бази даних розпочинаються з 0, йоли хоча якщо в таблиці властивість  $res->num_rows показує десять рядків то навіщо їх робити $res->num_rows -1  )

Потім знову ж
$res->data_seek($row_no);  - перейти (перейти кому чи вірніше чому?) до $row_no рядка об'єкту $res. Це знову ж властивість об'єкту $res
$row = $res->fetch_assoc(); - побудувати масив $row із значеннями рядка $row_no (масив $row скажем для 5 рядка буде: 5, 43, міша, false)

http://не-дійсний-домен/ForumReplace/mysql_01.jpg
P.S. Приклад неправильно зробив, потрібно з більшого до меншого :(
P.S.S. Прямо не пост а виріб мистецтва

13

Re: Вивчаю базу даних MySql

Зробіть так відразу після запиту $res,може зрозуміліше стане.

var_dump($res);
echo '<br />';
print_r($res);

На рахунок $row_no = $res->num_rows - 1
-1 тому,шо номерація починається з 0,тобто 0 - це перший рядок,1-другий і т.д..
Тобто,якщо в data_seek($row_no) (це вже метод обєкту $res,а не властивість ),передамо...
$res->data_seek(10); ,то,вибереться 9й рядок,по якому через $row = $res->fetch_assoc(); і створиться масив даних по цьому рядкові.

14

Re: Вивчаю базу даних MySql

Анатолій написав:

Привіт форумчанам, я вже все вивчив :), залишилась лише база даних MySql

Все вивчив? Напам'ять?
п.с. mysql - СУБД, а не база даних! читай книжки, роби практичні завдання, і все прийде

15 Востаннє редагувалося Анатолій (18.11.2014 18:00:32)

Re: Вивчаю базу даних MySql

VTrim написав:

Зробіть так відразу після запиту $res,може зрозуміліше стане.
var_dump($res);
echo '<br />';
print_r($res);

Дякую, я розгляну об'єкти в контексті бази даних чи навіть php .


Master_Sergius написав:

Все вивчив? Напам'ять?
п.с. mysql - СУБД, а не база даних! читай книжки, роби практичні завдання, і все прийде

Звичайно все вивчив :) от лише з об'єктами розберусь
так справді mysql - СУБД

16 Востаннє редагувалося Анатолій (27.11.2014 13:48:26)

Re: Вивчаю базу даних MySql

Накнопив статтю "Лічильник відвідувань сторінки" в контексті MySQL
http://не-дійсний-домен/pages/mysql_05_looks.php

http://не-дійсний-домен/ForumReplace/article_number.jpg

P.S. Можливо не зовсім коректно написана, але враховуюючи мої перші кроки в цій сфері, попрошу це врахувати :)

17

Re: Вивчаю базу даних MySql

Якщо використовувати ваш код лічильника, наприклад цей:

/ / Вносимо Ip-адресу в таблицю 2
$mysqli->query("INSERT INTO `Visitors_Part_02`(`Visitors_Ip`) VALUES ('$Temp_Visitors') ");

То в результаті не відомо яку сторінку проглянув користувач. Ви ж не будете для кожної сторінки робити окрему таблицю?

18

Re: Вивчаю базу даних MySql

ktretyak написав:

То в результаті не відомо яку сторінку проглянув користувач. Ви ж не будете для кожної сторінки робити окрему таблицю?

Згоден, потрібно ще дещо  в структурі аналізу сторінок відкорегувати, можливо якийсь інший підхід зробити для врахування відвідувань.....
Але це просто навчальне завдання для себе; та й власне кажучи є бажання вже інші теми розглядати, а ця тема мені вже чуть приїлась, якщо зовсім великі баги, то потрібно буде коректувати, а так при нагоді.
Зараз планую гарно розписати, створення сторінки коментарів, знову ж чисто в навчальних цілях :)

19 Востаннє редагувалося ktretyak (27.11.2014 11:53:57)

Re: Вивчаю базу даних MySql

Спробуйте наступне.

Створіть таблицю, де буде зберігатись статистика відвідуваності:

CREATE TABLE `stat` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `ip` VARCHAR(15) NOT NULL,
    `ip_internal` VARCHAR(15) NOT NULL,
    `referer` VARCHAR(1000) NULL DEFAULT NULL,
    `url` VARCHAR(300) NULL DEFAULT NULL,
    `user_agent` VARCHAR(200) NULL DEFAULT NULL,
    `language` VARCHAR(100) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `date` (`date`),
    INDEX `ip` (`ip`),
    INDEX `user_agent` (`user_agent`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
;

Потім у файлі лічильника:

<?php
// Цей масив може зберігатись в конфігураційному файлі.
$config = array(
    'hostname' => '',
    'username' => '',
    'password' => '',
    'database' => '',
);

$mysqli = new mysqli(
    $config['hostname']
    ,$config['username']
    ,$config['password']
    ,$config['database']
);

$mysqli->set_charset("utf8");

$mysqli->query("insert into stat(
                        `ip`
                        ,`ip_internal`
                        ,`referer`
                        ,`url`
                        ,`user_agent`
                        ,`language`
                        )
                        values(
                        '".$mysqli->real_escape_string(@$_SERVER['REMOTE_ADDR'])."'
                        ,'".$mysqli->real_escape_string(@$_SERVER['HTTP_X_FORWARDED_FOR'])."'
                        ,'".$mysqli->real_escape_string(@$_SERVER['HTTP_REFERER'])."'
                        ,'".$mysqli->real_escape_string(@$_POST['REQUEST_URI'])."'
                        ,'".$mysqli->real_escape_string(@$_SERVER ['HTTP_USER_AGENT'])."'
                        ,'".$mysqli->real_escape_string(@$_SERVER ['HTTP_ACCEPT_LANGUAGE'])."'
                        )" );

$mysqli->close();

Оновив щойно трохи код: Видалив з таблиці поле screen_resolution (бо для цього треба вам ще використовувати JavaScript), а також підправив HTTP_REFERER

Подякували: Анатолій1

20 Востаннє редагувалося Анатолій (27.11.2014 14:04:40)

Re: Вивчаю базу даних MySql

ktretyak написав:

Створіть таблицю, де буде зберігатись статистика відвідуваності:

                        '".$mysqli->real_escape_string(@$_SERVER['REMOTE_ADDR'])."'
                        ,'".$mysqli->real_escape_string(@$_SERVER['HTTP_X_FORWARDED_FOR'])."'
                        ,'".$mysqli->real_escape_string(@$_SERVER['HTTP_REFERER'])."'
                        ,'".$mysqli->real_escape_string(@$_POST['REQUEST_URI'])."'
                        ,'".$mysqli->real_escape_string(@$_SERVER ['HTTP_USER_AGENT'])."'
                        ,'".$mysqli->real_escape_string(@$_SERVER ['HTTP_ACCEPT_LANGUAGE'])."'
                        )" );

$_SERVER['REMOTE_ADDR'] - Ip-адреса клієнта,
$_SERVER['HTTP_X_FORWARDED_FOR'] - визначення проксі серверів ????
$_SERVER['HTTP_REFERER'] - адреса сторінки з якої прийшов відвідувач,
$_POST['REQUEST_URI '] - напевно повна url-адреса з додатковими даними ????
$_SERVER ['HTTP_USER_AGENT'] - тип браузера та операційна система відвідувача,
$_SERVER ['HTTP_ACCEPT_LANGUAGE'] - мова клієнта ??? наразі лише українська :)

Дякую за оптимізацію, але як на мене то ти пропонуєш майже професійний підхід до ідентифікації відвідувача, та ще й напевно, бажано використовувати webstorage.
Між іншим, який сенс в запропонованих виразах, як то тип браузера операційна система проксі REQUEST_URI?
Як на мене Ip-адреси досить, ну ще можливо з якої сторінки прийшов відвідувач.

Чесно, для мого рівня це буде дещо складновато, навіть з тим що я створив я здогадуюсь де можуть бути баги, але то таке.
Тоді добре я собі запланую практичну частину слідуючим чином,
- коментарі, (розвіюсь вирішенням задачки іншого плану),
- потім розгляну webstorage (вважаю буде корисно),
- Потім статистика відвідувань частина 2, оптимізація і таке інше саме з тими елементами що ти пропонуєш чи схожими залежить від необхідності