رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کوئری به دست آوردن بزرگترین آیدی
#1
سـلام . من میخوام که از جدول ، شماره آیدی رکوردی رو به دست بیارم که ( این دو شرط رو داشته باشن )

1- ایدی بزرگترین آیدی جدول باشه
2- شما نویسنده اون آیدی ، عدد 2 باشه


SELECT * FROM `wp_posts` WHERE `ID` = (SELECT Max( ID ) FROM wp_posts )  And post_author=2



کوئری رو به صورت بالا نوشتم ولی خروجی معقولی نداره .
پاسخ
تشکر شده توسط:
#2
کوئری شما صحیح نیست ! دلیل اش هم این است که وردپرس همه نوع پست را ذخیره میکنه و آخرین سطر قطعا پست مورد نظر ما ممکن نباشه. همچنین یک پست باید نوع و وضعیت اش را مشخص کنیم.

SELECT * FROM `wp_posts` WHERE  `post_status` = 'published' && `post_type` = 'post' && post_author=2 SORT BY `id` desc limit 1

اما نه اگر شما فقط میخواهین آخرین پست را بگیرین میتونین فیلد post_status را از شرط حذف کنید و همچنین اگر می خواهید هم پست و هم صفحه را بگیرید میتوانید بجای `post_type` = 'post' از (`post_type` = 'post' || `post_type` = 'page') استفاده کنید
گروه طراحی سایت زینیا

عقل سالم در بدن سالم ! ای برنامه نویس مواظب خودت باش

باگ عصبی چیست ؟
var_dump(1 == 1); //bool(false)
پاسخ
تشکر شده توسط: بیتا_حکمت
#3
ممنونم ، اما متاسفانه کد شما هم اجرا شد ولی خروجی اش درست نبود ، مثال می زنم . من (شماره نویسنده ها ) رو در یکی از رکوردها به عدد " 5 " تغییرش دادم و این کوئری رو اجرا کردم


SELECT *
FROM `wp_posts`
WHERE `ID` = (
SELECT MAX( `ID` )
FROM `wp_posts` ) && post_author =5


حداقل باید یه رکورد برگردونده می شد (همونی که من به 5 تغیرش دادم ) ولی این اتفاق نیفتاد .
پاسخ
تشکر شده توسط:
#4
در حال ویرایش بودم مجددا پست من را نگاه کنید.
گروه طراحی سایت زینیا

عقل سالم در بدن سالم ! ای برنامه نویس مواظب خودت باش

باگ عصبی چیست ؟
var_dump(1 == 1); //bool(false)
پاسخ
تشکر شده توسط: بیتا_حکمت
#5
اول آیدیهایی که یوزر 2 نویسندشون بوده رو دربیار و بعد از بین اون آیدیها بزرگترین آیدی رو انتخاب کن.

$result = mysql_query('SELECT `id` FROM `posts` WHERE `author_id`=2');
if (!$result) {
   die('Invalid query: ' . mysql_error());
}
$ids=array();
while ($row = mysql_fetch_assoc($result)) {
   $ids=$row['id'];
}
$maxId=  max($ids);
echo $maxId;
پاسخ
تشکر شده توسط: بیتا_حکمت
#6
بازم ممنون ، فکر کنم نسخه Mysql ام مشکل داره ، چون هر دستوری که Limit داشته باشه رو خطا می ده ، این خطا رو داد :


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server

version for the right syntax to use near 'Limit 1' at line 1
پاسخ
تشکر شده توسط:
#7
(23-03-1394، 08:04 ب.ظ)بیتا_حکمت نوشته: بازم ممنون ، فکر کنم نسخه Mysql ام مشکل داره ، چون هر دستوری که Limit داشته باشه رو خطا می ده ، این خطا رو داد :


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server

version for the right syntax to use near 'Limit 1' at line 1


شما خطای نحوی دارید ، کوئری کامل را اینجا قرار دهید.
گروه طراحی سایت زینیا

عقل سالم در بدن سالم ! ای برنامه نویس مواظب خودت باش

باگ عصبی چیست ؟
var_dump(1 == 1); //bool(false)
پاسخ
تشکر شده توسط:
#8
این کوئری رو امتحان کنید:
SELECT MAX(`id`) AS `max_id` FROM `wp_posts` WHERE (`post_author`='2');
پاسخ
تشکر شده توسط: بیتا_حکمت
#9
یک حالت ، به ذهن خودم رسید ، چون تو هیچ سایتی مشابه اشو ندیدم ذوق شدم گفتم اینجا زودتر اعلام کنم d:
اینکه دیشب فهمیدم تو mysql هم میشه متغیر کردم برام خیلی جالب بود .


set @idmax=(SELECT max(id) FROM `wp_posts` WHERE `post_author`=2);
select *  from `wp_posts`  where id=@idmax;


 
پاسخ
تشکر شده توسط:
#10
بله. به زودی آموزش MySQL همراه با ترفندها رو توی بخش مربوطه شروع میکنم. یکی دیگه از کاربردهای متغیرها:
SET @var:=0;
UPDATE `wp_posts` SET `id`=(@var:=@var+1) ORDER BY `id`;
با این کار، جدول wp_posts شما دوباره به ترتیب از 1 به بعد id میخوره (id ها مرتب میشن) و اگه از کلید خارجی توی وضعیت ON UPDATE CASCADE توی جداول دیگه برای اشاره به پستهای این جدول استفاده شده باشه، بطور خودکار کلیدهای خارجی هم اصلاح خواهد شد.
پاسخ
تشکر شده توسط: بیتا_حکمت
#11
(23-03-1394، 10:06 ب.ظ)ابوالفضل زیارت بان نوشته:
(23-03-1394، 08:04 ب.ظ)بیتا_حکمت نوشته: بازم ممنون ، فکر کنم نسخه Mysql ام مشکل داره ، چون هر دستوری که Limit داشته باشه رو خطا می ده ، این خطا رو داد :


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server

version for the right syntax to use near 'Limit 1' at line 1


شما خطای نحوی دارید ، کوئری کامل را اینجا قرار دهید.


حق با شماست ، من دیشب احتمالا اشتباه املایی داشتم ، به این صورت نوشتم جواب داد


SELECT *
FROM wp_posts
WHERE `post_author` =2
ORDER BY id DESC
LIMIT 1

پاسخ
تشکر شده توسط:
#12
شما پست ، صفحه، ویرایش یا ضمیمه می خواستین ؟

چون اصلا آخرین آیدی از یک کاربر میتونه فقط یکی از این ها باشد اگر شرطی گداشته نشود.
گروه طراحی سایت زینیا

عقل سالم در بدن سالم ! ای برنامه نویس مواظب خودت باش

باگ عصبی چیست ؟
var_dump(1 == 1); //bool(false)
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان