MySQL

Soul_Stealler

Registered
Тъй като много хора питат за определени неща свързани със заявките към база данни, създавам тази тема.

Първо трябва да се свържете към базата данни.
Код:
$dbuser="";
$dbpasswd="";
$dbname="";
mysql_connect(localhost,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "MySQL Error.");

На $dbuser пишете потребителя. Попринцип на localhost e root
На $dbpasswd пишете паролата за потребителя ($dbuser). Ако няма парола може да се остави празно.
На $dbname пишете името на базата данни.

Това е началото. Сега е време за малко примери на заявки.

$query="SELECT * from ТАБЛИЦА where КОЛОНА='ДУМА'";
Търси в таблицата "ТАБЛИЦА" в колоната "КОЛОНА" за редове съдържащи думата "ДУМА"

Резултатите се изкарват с:

$result=mysql_query($query);
while ( $red = mysql_fetch_array( $result )){

}


Пример:
Имате таблица "privmsg", колона "user" и търсите думата "baf".

Код:
$dbuser="root";
$dbpasswd="";
$dbname="test";
mysql_connect(localhost,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "MySQL Error.");
$query="SELECT * from privmsg where user='baf'";
$result=mysql_query($query); 
while ( $red = mysql_fetch_array( $result )){
echo $red[msg]."<hr>"; //Показва всичко от колона msg където на същия ред в колона user пише baf. Разделя ги с <hr>
}

----------------------------------------------------------------------------------------------------------------

Преброяване на редове.
Ще използваме заявката от горния пример:
$query="SELECT * from privmsg where user='baf'";
$result=mysql_query($query);

И после вместо да изкарваме резулатати - ще ги преброим.
$num=mysql_num_rows($result);
$num придобива стойноста на броя на редовете където в колоната user пише baf

Пример:

Код:
$dbuser="root";
$dbpasswd="";
$dbname="test";
mysql_connect(localhost,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "MySQL Error.");
$query="SELECT * from privmsg where user='baf'";
$result=mysql_query($query); 
$num=mysql_num_rows($result);
----------------------------------------------------------------------------------------------------------------

Изтриване на ред.
[/b]$query = "delete from privmsg where id='1'";
mysql_query($query);
В таблицата privmsg изтриват редовете където в колоната id пише 1
Може да се добави и допълнително условие.
Пример
$query = "delete from privmsg where id='1' and user='S_Soul'";
Тогава трие редовете където колоната id е 1 и колоната user е S_Soul

----------------------------------------------------------------------------------------------------------------

Добавяне на ред.
$query = "insert into users (user, pass) values ('S_Soul', '123456')";
mysql_query($query);

В таблицата users се добавя нов ред като в колона user се записва S_Soul, а в pass - 123456

----------------------------------------------------------------------------------------------------------------

Промяна на ред.
$query = "UPDATE users SET user = 'Our' WHERE id = '5'";
mysql_query($query);

В таблица users на реда където id стойноста му е 5 променя записа в колона user и го прави Our

----------------------------------------------------------------------------------------------------------------

Допълнителни условия.
------

Order by

Преведено на български означава - подреждане по.
В заявката добавяме order by КОЛОНА
Код:
$dbuser="root";
$dbpasswd="";
$dbname="test";
mysql_connect(localhost,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "MySQL Error.");
$query="SELECT * from users order by id";
$result=mysql_query($query); 
while ( $red = mysql_fetch_array( $result )){
echo $red[user]."<br>"; //Показва всичко от колона user. Разделя ги с <br>
}
В случая ще извади всички стойности от колоната user, НО ще са подредени според стойноста в колона id.
Пример:
+---------- ----+
| id | user
|----------------|
| 1 | DiDo
| 2 | S_Soul
| 3 | baf
| 4 | Our
+---------------+
Ще покаже:
DiDo
S_Soul
baf
Our

Ако обаче след order by КОЛОНА се добави desc ще ги подреди по обратния ред.
Our
baf
S_Soul
DiDo
$query="SELECT * from users order by id desc";

----------------------------------------------------------------------------------------------------------------

LIMIT

С няколко думи - колко реда да се покажат.
Може да се направи и след колко реда да започне да се показват и колко на брой да са.
Ако нещо не сте разбрали нека го обясня в примери ;)

Показване на първите 2 реда.
Ще го комбинирам с order by id за да може да се покажат подредени по id.
$dbuser="root";
$dbpasswd="";
$dbname="test";
mysql_connect(localhost,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "MySQL Error.");
$query="SELECT * from users order by id LIMIT 2";
$result=mysql_query($query);
while ( $red = mysql_fetch_array( $result )){
echo $red[id]." | ".$red[user]."<br>"; //Показва всичко от колона user. Разделя ги с <br>
}

Ще покаже:
1 | DiDo
2 | S_Soul

Ако обаче на LIMIT се добави една запетая, т.е. LIMIT 1,2 - Ще пропусне 1 реди ще се покажат следващите 2.
Пример:
$dbuser="root";
$dbpasswd="";
$dbname="test";
mysql_connect(localhost,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "MySQL Error.");
$query="SELECT * from users order by id LIMIT 1,2";
$result=mysql_query($query);
while ( $red = mysql_fetch_array( $result )){
echo $red[id]." | ".$red[user]."<br>"; //Показва всичко от колона user. Разделя ги с <br>
}

Ще покаже:
2 | S_Soul
3 | baf

Също така може да се комбинира и с desc.
$query="SELECT * from users order by id desc LIMIT 1,2";
Ще пропусне 1 ред в обратен ред и ще покаже следвашите 2 реда.
3 | baf
2 | S_Soul
Our се пропуска тъй като id-то му е най-голямо.

----------------------------------------------------------------------------------------------------------------

Импортване на .sql файл.
Първо трябва да разясня нещо преди да дам скрипта.
Трябва да имате създадена база данни + таблица.
Скрипта който намерих работи засега само ако ги има тези неща създадени, и в бекъпа данните са подредени по следния ред:
Код:
1	654	123123
Тоест - между различните стойности за колоните трябва да настиснете TAB. Не Space, а TAB !
Ето го кода:
Код:
$dbuser="root";
$dbpasswd="";
$dbname="test";
mysql_connect(localhost,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "Unable to select database");
$tableName  = 'test';
$backupFile = 'C:/appserv/www/backup.sql'; //ВАЖНО - трябва да е зададен ЦЕЛИЯ път до файла !
$query = "LOAD DATA INFILE '$backupFile' INTO TABLE $tableName";
$result = mysql_query($query) or die (mysql_error());

По същия принцип може да се направи да се export-ват данни.
Код:
$dbuser="root";
$dbpasswd="";
$dbname="test";
mysql_connect(localhost,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "Unable to select database");
$tableName  = 'test';
$backupFile = 'C:/appserv/www/backup.sql'; //ВАЖНО - трябва да е зададен ЦЕЛИЯ път до файла !
$query = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName";
$result = mysql_query($query) or die (mysql_error());

----------------------------------------------------------------------------------------------------------------

Засега толкоз.
Утре или в други ден ще напиша още.
Ако някой види някъде грешка - нека каже :)
 
за броенето в mysql си има функция count()
1ви вариант:
$query="SELECT count(*) AS numrows from `table` where `row`='5'";
$result = mysql_query($query);
$red = mysql_fetch_array( $result);
echo $red['numrows'];


2ри вариант:
$query="SELECT count(*) from `table` where `row`='5'";
$result = mysql_query($query);
$red = mysql_fetch_array( $result );
echo $red[0];

също слагаи ` ` на имената на колони , полета и тн.
Сега напиши нещо и за Order by и LIMIT
 
:?: доста полезна информация .... от тук мога да направя много неща ... особено като гледам всяко нещо за какво е :)
 
Код:
$dbuser=""; 
$dbpasswd=""; 
$dbname=""; 
mysql_connect(localhost,$dbuser,$dbpasswd); 
mysql_select_db($dbname) or die( "MySQL Error.");

На $dbname пишете името на таблицата

На $dbname е трябва ли да е името на Базата данни а не на таблицата
 
Тва обаче си е супер просто и добре обяснено ще ми помога да си напиша много скриптове без да се чудя защото си е мини ръководство с най важните неща!
Браво ако продължаваш да го допълваш ще стане супер
 
ам за LIMIT ще допълня..
LIMIT може да приеме 1 или 2 стойности (могат да бъдат само цифри).
При 1 е ясно показва колко реда да покаже.
Но при 2 имаме например LIMIT 1,2
"1" е "offset"-а т.е. от кой ред да започне ,а "2" е максимума редове който да покаже.
Накратко LIMIT 5 е еквивалент на LIMIT 0,5
 
Добавих два скрипта.
Единия е за експорт а другия е за импорт от/в базата данни.
Ако имате въпроси - питайте ;)

Ето това е доста добър скрипт за import на страндартния .sql файл.
ЛИНК: http://www.ozerov.de/bigdump.php
:)
 
нали може да добавя :) ето още един начин за импорт на база. Често се използва при install.php

Код:
<?php
$server='localhost';
$user='username';
$pas='userpassword';
$db='database';

mysql_connect ($server, $user, $pas) or die ("Connection failed due to: " . mysql_error());

mysql_select_db ($db) or die("Selection failed due to: " . mysql_error());

$cat = "
CREATE TABLE cat (
  id int(10) NOT NULL auto_increment,
  cats varchar(250) default NULL,
  PRIMARY KEY  (id)
)";

echo "Table cat has been added...<br />";

mysql_query($cat) or die("Query failed due to: " . mysql_error());
?>

първите редове са за връзка със сървара, сега да кажа за следните:

Код:
$cat = "
CREATE TABLE cat (
  id int(10) NOT NULL auto_increment,
  cats varchar(250) default NULL,
  PRIMARY KEY  (id)
)";

тук се създава таблиза в назата, с име "cat" и стойности id и cats. Ако всичко е минало както трябва, ще покаже: "Table cat has been added..." демек, че таблицата е създадена, А ако има някаква грешка ще покаже: "Query failed due to:" с обяснение след него, защо не става. може да добавите колкото искате таблици още като само копирате:
Код:
$cat = "
CREATE TABLE cat (
  id int(10) NOT NULL auto_increment,
  cats varchar(250) default NULL,
  PRIMARY KEY  (id)
)";

echo "Table cat has been added...<br />";

mysql_query($cat) or die("Query failed due to: " . mysql_error());

и замените $cat с друга стойност. и съдържанието на таблицата.
 
То че има още доста команди - има, но ако някой има идея какво още може да се добави, нека каже.
:)
 
Поздрави! Браво Радо само така :)))) айде и успех на състезанието :lol:
 
Soul_Stealler каза:
То че има още доста команди - има, но ако някой има идея какво още може да се добави, нека каже.
:)

като стана дума за COUNT, не видях никъде да се споменава за GROUP BY

и един съвет - за да я по ясно, може би ще е по добре думи като select, from, where, count и тн.. са удебелени или в друг цвят. Така става много по ясно, коя дума от заявката е служебна и кое ме...

Иначе други често ползвани неща за които не е писано:
свързване на таблици (админа наскоро го беше описал в една тема, може да се ползва наготово)
avg()
max()
min()
lastid()
sum()
distinc()
like
разните му там аритметични функции
функции за датата и часа!!! (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html)
Индекси
вложени заявки
 

Горе