PDA

View Full Version : سوال: مشکل با حلقه while و ازیابی سطرهای یه جدول



idocsidocs
سه شنبه 17 خرداد 1390, 01:00 صبح
من برای بازیابی سطرهای یه جدول از حلقه while استفاده می کنم.
مشکل اینجاست که این حلقه فقط یه سطر رو بازیابی می کنه و نمایش می ده. تا حالا این مشکل رو نداشتم. کوئری ها رو چک کردم و در ست هستن.


$this->db->set_charset('UTF8');
$result = $this->db->query($sql_1);
$num = $result->num_rows;
if( $num > 0 )
{
$result_15 = $this->db->query($sql_15);
$num_15 = $result_15->num_rows;
if($num_15>0)
{
while ($row = $result_15->fetch_assoc())
{
extract($row);
کد کوئری من هم به این شکل هست.


$sql_1="select * from users where(ok='no' && type='user')";
$sql_15="select * from users where(ok='no' && type='user') limit 0, 15 ;

$ M 3 H R D A D $
سه شنبه 17 خرداد 1390, 01:07 صبح
کدتو کامل بزار

r0ot$harp
سه شنبه 17 خرداد 1390, 01:11 صبح
من برای بازیابی سطرهای یه جدول از حلقه while استفاده می کنم.
مشکل اینجاست که این حلقه فقط یه سطر رو بازیابی می کنه و نمایش می ده. تا حالا این مشکل رو نداشتم. کوئری ها رو چک کردم و در ست هستن.


$this->db->set_charset('UTF8');
$result = $this->db->query($sql_1);
$num = $result->num_rows;
if( $num > 0 )
{
$result_15 = $this->db->query($sql_15);
$num_15 = $result_15->num_rows;
if($num_15>0)
{
while ($row = $result_15->fetch_assoc())
{
extract($row);

دوست عزیز دقیق بگو می خوای تعداد سطر هارو دربیاری یا فیلد های هر سطر رو ؟؟؟ در ضمن کد کوئری رو هم قرار بدین .

باتشکر احسان

idocsidocs
سه شنبه 17 خرداد 1390, 02:01 صبح
دوست عزیز دقیق بگو می خوای تعداد سطر هارو دربیاری یا فیلد های هر سطر رو ؟؟؟ من می خوام دفعه اول باید تعداد سطرها دربیارم تا اگه سطی وجود داشت، اطلاعات موجود در سطرها رو بازیابی کنم و به کاربر نشون بدم.

کد کوئری من هم به این شکل هست.


$sql_1="select * from users where(ok='no' && type='user')";
$sql_15="select * from users where(ok='no' && type='user') limit 0, 15 ;

MMSHFE
سه شنبه 17 خرداد 1390, 11:52 صبح
با سلام، يك سؤال دارم. جديداً ديدم چند نفر از دوستان توي شرطها از && استفاده ميكنن. چرا از SQL استاندارد استفاده نميكنيد؟ به جاش بنويسيد AND چون && مال PHP هست!
موفق باشيد.

idocsidocs
سه شنبه 17 خرداد 1390, 11:53 صبح
کسی نمی تونه راهنمایی کنه؟

MMSHFE
سه شنبه 17 خرداد 1390, 12:05 عصر
كلاً توي جدول چند تا ركورد دارين؟ چندتاشون فيلد typeشون مساوي user و فيلد okشون مساوي no هست؟ ضمناً SQL استاندارد بنويسيد:


$sql_1='SELECT * FROM `users` WHERE(`ok`=\'no\' AND `type`=\'user\')';
$sql_15='SELECT * FROM `users` WHERE(`ok`=\'no\' AND `type`=\'user\') LIMIT 0, 15';

ببينيم مشكل رفع ميشه يا نه.

idocsidocs
سه شنبه 17 خرداد 1390, 12:13 عصر
دوستان مشکل حل شد. مرسی.

بخاطر این بود که بعضی از ستونها رو انتخاب نکرده بودم.

idocsidocs
سه شنبه 17 خرداد 1390, 12:17 عصر
كلاً توي جدول چند تا ركورد دارين؟ چندتاشون فيلد typeشون مساوي user و فيلد okشون مساوي no هست؟ ضمناً SQL استاندارد بنويسيد:


$sql_1='SELECT * FROM `users` WHERE(`ok`=\'no\' AND `type`=\'user\')';
$sql_15='SELECT * FROM `users` WHERE(`ok`=\'no\' AND `type`=\'user\') LIMIT 0, 15';

ببينيم مشكل رفع ميشه يا نه.
توي اين کوئري چه دليلي داره که از \'no\' استفاده مي کنيد؟آيا حتما بايد سينگل کوتيشن ها رو استفاده کرد ؟ لطفا در مورد ضرورت استفاده از کوتيشن ها توضيح بديد.

r0ot$harp
سه شنبه 17 خرداد 1390, 13:19 عصر
توي اين کوئري چه دليلي داره که از \'no\' استفاده مي کنيد؟آيا حتما بايد سينگل کوتيشن ها رو استفاده کرد ؟ لطفا در مورد ضرورت استفاده از کوتيشن ها توضيح بديد.


دوست عزیز در این کوئری چون از single quotation استفاده شده در قسمتی که no قرار دیدن با یه ' اون رو باز و بسته کردین و چون در تعداد single quotation اشتباه می افته از \ استفاده می کنیم تا سیستم متوجه بشه این یه کارکتر single quotation هست نه single quotation اجرایی.

باتشکر احسان

idocsidocs
سه شنبه 17 خرداد 1390, 14:37 عصر
دوست عزیز در این کوئری چون از single quotation استفاده شده در قسمتی که no قرار دیدن با یه ' اون رو باز و بسته کردین و چون در تعداد single quotation اشتباه می افته از \ استفاده می کنیم تا سیستم متوجه بشه این یه کارکتر single quotation هست نه single quotation اجرایی.

باتشکر احسان
اینا رو که می دونم :چشمک:

می شه بگید با وجود اینکه دو طرف کوئری درون سینگل کوتیشن قرار داره، چرا باید no رو هم توی سینگل کوتیشن قرار بدیم؟

r0ot$harp
سه شنبه 17 خرداد 1390, 16:00 عصر
اینا رو که می دونم :چشمک:

می شه بگید با وجود اینکه دو طرف کوئری درون سینگل کوتیشن قرار داره، چرا باید no رو هم توی سینگل کوتیشن قرار بدیم؟

دوست عزیز اون یه مقدار رشته ای هست نه یه مقدار int . برای این تو '' قرار می دیم تا به عنوان رشته ارسال بشه . می تونین نزارین و خطایی که می ده رو ملاحظه کنید .

باتشکر احسان

idocsidocs
سه شنبه 17 خرداد 1390, 18:08 عصر
دوست عزیز اون یه مقدار رشته ای هست نه یه مقدار int . برای این تو '' قرار می دیم تا به عنوان رشته ارسال بشه . می تونین نزارین و خطایی که می ده رو ملاحظه کنید .

باتشکر احسان
وقتی یه کوئری ارسال می کنیم، کل کوئری داخل سینگل کوتیشن قرار می گیره. این یعنی همه کوئری (اعداد و حروف) بصئرت رشته تعریف می شن. در این صورت به چه دلیل حتما باید no رو توی سنگل کوتیشن قرار بدیم؟

MMSHFE
چهارشنبه 18 خرداد 1390, 07:03 صبح
دوست گرامي، مستندات MySQL پيشنهاد ميكنه هر مقدار رو توي Query داخل Single Quotation و اسامي شناسه ها (مثل جداول، ديتابيس، فيلدها و...) رو داخل Back Quotation قرار بديم. اينطوري دقيقاً ميفهمه كه منظورمون يك مقدار بوده، يك فيلد بوده، يك دستور بوده يا هر چيز ديگه. براي مثال، فرض كنيد توي Query مينويسيد date در اين حالت، MySQL از كجا بدونه منظورتون مقدار date بوده؟ فيلد date هست؟ تابع date هست؟ ولي وقتي ميگين 'date' يعني يك مقدار و وقتي ميگين `date` يعني يك فيلد، جدول يا... كه برحسب محل استفاده ميفهمه فيلد منظورتون بوده يا جدول يا ديتابيس و... و درمورد مقادير هم فرقي نميكنه كه اون مقدار، يك رشته هست يا يك عدد. كلاً توي Single Quotation قرارش بدين تا بدونه مقدار هست. خودش موقع كار روي فيلدها، نوع مقدار رو متناسب با نوع فيلد مربوطه درنظر ميگيره.
موفق باشيد.

idocsidocs
چهارشنبه 18 خرداد 1390, 11:44 صبح
دوست گرامي، مستندات MySQL پيشنهاد ميكنه هر مقدار رو توي Query داخل Single Quotation و اسامي شناسه ها (مثل جداول، ديتابيس، فيلدها و...) رو داخل Back Quotation قرار بديم. اينطوري دقيقاً ميفهمه كه منظورمون يك مقدار بوده، يك فيلد بوده، يك دستور بوده يا هر چيز ديگه. براي مثال، فرض كنيد توي Query مينويسيد date در اين حالت، MySQL از كجا بدونه منظورتون مقدار date بوده؟ فيلد date هست؟ تابع date هست؟ ولي وقتي ميگين 'date' يعني يك مقدار و وقتي ميگين `date` يعني يك فيلد، جدول يا... كه برحسب محل استفاده ميفهمه فيلد منظورتون بوده يا جدول يا ديتابيس و... و درمورد مقادير هم فرقي نميكنه كه اون مقدار، يك رشته هست يا يك عدد. كلاً توي Single Quotation قرارش بدين تا بدونه مقدار هست. خودش موقع كار روي فيلدها، نوع مقدار رو متناسب با نوع فيلد مربوطه درنظر ميگيره.
موفق باشيد.
در این رابطه، دیگه چه اصولی رو باید رعایت کنم؟

در مورد مقادیر گفتید که باید توی سینگل کوتیشن قرار بگیرن، لطفا بگید که کل کوئری باید توی سینگل کوتیشن قرار بگیره یا دابل کوتیشن؟

MMSHFE
چهارشنبه 18 خرداد 1390, 11:53 صبح
با سلام، اون ديگه بستگي به نيازتون داره. اگه توي عبارت از متغير استفاده كردين، بايد Double باشه در غير اينصورت، از Single استفاده كنيد كه سرعتش بيشتره چون پردازشي روش انجام نميشه.
موفق باشيد.

idocsidocs
چهارشنبه 18 خرداد 1390, 12:11 عصر
با سلام، اون ديگه بستگي به نيازتون داره. اگه توي عبارت از متغير استفاده كردين، بايد Double باشه در غير اينصورت، از Single استفاده كنيد كه سرعتش بيشتره چون پردازشي روش انجام نميشه.
موفق باشيد.
اگر کل کوئری توی دابل کوتیشن باشه و متغیر داخل سینگل کوتیشن باشه، mysql متغیر رو با مقدار جایگزین می کنه یا اینکه باید متغیر رو هم توی دابل کوتیشن قرار داد؟

MMSHFE
چهارشنبه 18 خرداد 1390, 12:23 عصر
دوست گرامي، MySQL اين كار رو انجام نميده. اين وظيفه PHP هست. وقتي كل عبارت شما توي Double Quotation هست، متغيرها با مقدارشون جايگزين ميشن و بعد براي MySQL ارسال ميشن. ديگه به اينكه داخل عبارت، قبل و بعدش Single Quotation گذاشته باشين كاري نداره.
موفق باشيد.