آموزش PHP (قسمت8-7)

آموزش PHP (قسمت هفتم )

SQL چیست ؟
مخفف Structured Query Language و به معنی زبان پرس و جوی ساخت یافته است.

پرس جو ؟
اصطلاح پرس و جو یا Query به این معنی است که ما اطلاعاتی که داریم رو میخواییم باهاش چکار کنیم. مثلا اون رو بخونیم ، قسمتی از اون رو بخونیم ، تغییرش بدیم ، بهش یه چیزایی اضافه کنیم و …

مثال :
1- لیست تمام کاربرانی که از تاریخ 12 فروردین 1385 به بعد ثبت نام کرده اند را می خواهم.
2- حساب کاربری فلانی را قفل کن.
3- پسورد کاربری که یوزر اون برابر با ali هست رو به 123 تغییر بده .

حال ما می خواییم بدونیم که چطوری این ها رو به کامپیوتر بفهمونیم.

اکثر Query هایی که ما استفاده می کنیم از 4 حالت زیر خارج نیستند.
1- Select خواندن ، جستجو …
2- Insert درج اطلاعات جدید.
3- Update به هنگام سازی.
4- Delete حذف اطلاعات.

SELECT:
اول یه مثال میزنیم تا گیج نشوید:

کد: SELECT user FROM userTable

این Query از تمامی رکورد های جدول userTable فیلد user را پیدا می کند.

یکی دیگه :

کد: SELECT user, name, lastName, Id FROM userTable

این یکی تمامی فیلد های ذکر شده جلوی دستور SELECT را از جدول userTable پیدا می کنه.

اگه همه فیلد ها رو بخواییم نشون بده چی ؟ باید همه فیلد ها رو جلوی SELECT بنویسیم؟
برای این کار به جای این که نام همه فیلد ها رو بنویسید می تونید از * استفاده کنید یعنی :

کد: SELECT * FROM userTable

اگه یه شرط داشتیم چی؟ مثلا "کاربری رو پیدا کن که نام کاربری اون ali و پسورد اون 123 است"…
برای شرط در query ها از WHERE استفاده میکنیم. اینطوری:

کد: SELECT * FROM userTable WHERE userName = ‘ali’

معنی این: تمام رکورد های جدول userTable رو پیدا کن که شرط
کد: userName = ‘ali’
رو داشته باشند.

اگه شرط هامون چند حالت داشته باشند ؟ مثلا این:

کد: SELECT * FROM userTable WHERE userName = ‘ali’ AND userPassword=’123

یعنی: تمام رکورد های جدول userTable را پیدا کن که فیلد userName اون برابر با ali و فیلد userPassword اون برابر با 123 باشه.
به همین ترتیب میتونه به جای AND کلمه OR را قرار بدین همچنین میتونین هر شرطی خواستید اضاف کنید.

مرتب سازی داده های خروجی:
برای مرتب کردن خروجی براساس یک فیلد از این دستور توی Query استفاده میکنیم.

کد: ORDER BY FieldName ASC

که FieldName نام فیلدی هست که مرتب سازی بر اساس اون صورت می گیره و اون ASC میگه که مرتب سازی صعودی باشه ؛ اگه بخواییم مرتب سازی نزولی باشه به جای ASC از DESC استفاده می کنیم.
مثال:

کد: SELECT * FROM postTable WHERE postId>50 ORDER BY postTitle ASC

یعنی چه ..؟
تمام رکورد های جدول postTable رو پیدا کن که مقدار فیلد postId اون بزرگتر از 50 باشه و اون رو بر اساس فیلد postTitle به صورت صعودی مرتب کن.

اگه نخواییم داده های تکراری نشون داده بشن چی ؟
از

کد: GROUP BY FieldName

استفاده میکنیم.

مثلا :

کد: SELECT * FROM postTable WHERE senderId=103 GROUP BY postID

یعنی؟ : تمام رکورد ها را از جدول postTable نمایش بده که فیلد postID (کد ارسال کننده) اون برابر 103 است. و پست های تکراری رو حذف کن.(اون رکورد هایی که postID مشابهی دارند فقط یکی شون رو نشون بده)
شاید مثال خوبی نباشه..

جستجو:
برای جستجو در داده های یه جدول به صورتی که مثلا اگه ali رو جستجو گردیم تمامی نتایجی که شامل عبارت ali میشود را نشان دهیم.

کد: SELECT * FROM postTable WHERE postBody LIKE ‘%ali%’

تمام چیزهایی که توش ali باشه رو پیدا میکنه اگه بخواییم فقط اونایی که اولشون با ali شروع می شه به جای ‘%ali%’ فقط آخرش % می گذاریم یعنی :

کد: SELECT * FROM postTable WHERE postBody LIKE ‘ali%’

برای اونایی که به ali‏ ختم می شن وارونه فقط اولش % می گذاریم.

داشت یادم می رفت برای شمردن نتیجه یک SELECT که فقط تعداد برامون مهم باشه از تابع COUNT استفاده می کنیم:

کد: SELECT COUNT(*) FROM userTable WHERE registerDate < ’85/10/15′

البته توابع دیگه ای هم هست که فعلا نمی گم چون ممکنه سر در گم بشید.

INSERT:
این query برای درج رکود جدید توی جدول استفاده میشه.
این طوری:

کد: INSERT INTO myTable (userName, userPassword, userReallyName)
VALUES
(‘ali’, ‘123’, ‘Ali Agho’)

(تو چند خط نوشتم که راحتتر خونده بشه البته توصیه می شه توی برنامه هاتون هم اینطوری بنویسید)
خوب این query یه رکورد جدید رو توی جدول myTable درج میکنه که مقدار فیلد userName اون ali و مقدار فیلد userPassword اون 123 و مقدار فیلد userReallyName اون Ali Agho هست.
تو پرانتز اولی اگه فیلدی رو ننویسید اشکالی نداره (البته اگه فیلد اون Not NULL نباشه) مقدار Default توش قرار میگیره که اگه موقع ساختن جدول تعیین نشده باشه Null خواهد شد. در هر صورت بایستی تعداد فیلدی که توی پرانتز اولی می نویسید با تعداد فیلد پرانتز دوم برابر باشه.
در ضمن میتونید کلا پرانتز اول رو نگذارید اونوقت توی پرانتز دوم برای تمام فیلد ها بایستی مقدار تعیین کنید.

یک نکته :
توی MySQL میتونید n تا رکورد رو با یه query درج کنید. مثال:

کد: INSERT INTO myTable
VALUES
(‘ali’, ‘123’, ‘Ali Agho’),
(‘mojataba’, ‘1100012’, ‘Agh Mojtaba’),
(‘reza’, ‘1545587ax1’, ‘Agha Reza’)

به همین سادگی.

UPDATE:
برای ویرایش یه چیز استفاده میشه. مثلا تغییر پسورد، ویرایش یه مطلب و …
مثال:

کد: UPDATE myTable SET userName=’ali’

یعنی : برای تمام رکورد های جدول myTable مقدار فیلد userName رو به ali‏ تغییر بده …
تمام رکورد ها چرا ؟
برای این که شرطی تعیین نکردیم. اگه این طوری بنویسیم اون وقت محدود به رکورد (های) خاصی می شه:

کد: UPDATE myTable SET userName=’ali’ WHERE userID=53

فقط رکورد هایی که مقدار فیلد userID اونا برابر با 53 باشه تغییر میکنند.
ما میتونیم همزمان چند تا فیلد رو با هم تغییر بدیم:

کد: UPDATE myTable
SET userName=’ali’,
userPassword=’123′,
userReallyName = ‘Ali Aghoye Gol’
WHERE userID=53

WHERE اینجا مثل توی SELECT هست.

DELETE:
برای حذف رکورد از جدول استفاده میشه. مثلا:

کد: DELETE FROM myTable

تمامی رکورد های جدول myTable‏ رو حذف میکنه.

توجه :
1- اینجا بعد از DELETE و قبل از FROM چیزی نیست با SELECT اشتباه نکنید.
2- باید خیلی مواظب این جور query‏ ها باشید. چون بعضی وقت ها به خاطر یه اشتباه کوچولو خیلی چیزا از دست میروند.

اگه بخواهیم رکورد(های) خاصی رو حذف کنیم بایستی از شرط استفاده کنیم مثل update :

کد: DELETE FROM myTable WHERE userID=662

فقط رکورد هایی رو حذف می کنه که مقدار فیلد userID اونا برابر 662 باشه.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اجرا شده توسط: همیار وردپرس