سـلام . من میخوام که از جدول ، شماره آیدی رکوردی رو به دست بیارم که ( این دو شرط رو داشته باشن )
1- ایدی بزرگترین آیدی جدول باشه
2- شما نویسنده اون آیدی ، عدد 2 باشه
SELECT * FROM `wp_posts` WHERE `ID` = (SELECT Max( ID ) FROM wp_posts ) And post_author=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') استفاده کنید
ممنونم ، اما متاسفانه کد شما هم اجرا شد ولی خروجی اش درست نبود ، مثال می زنم . من (شماره نویسنده ها ) رو در یکی از رکوردها به عدد " 5 " تغییرش دادم و این کوئری رو اجرا کردم
SELECT *
FROM `wp_posts`
WHERE `ID` = (
SELECT MAX( `ID` )
FROM `wp_posts` ) && post_author =5
حداقل باید یه رکورد برگردونده می شد (همونی که من به 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;
بازم ممنون ، فکر کنم نسخه 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
(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 MAX(`id`) AS `max_id` FROM `wp_posts` WHERE (`post_author`='2');
یک حالت ، به ذهن خودم رسید ، چون تو هیچ سایتی مشابه اشو ندیدم ذوق شدم گفتم اینجا زودتر اعلام کنم d:
اینکه دیشب فهمیدم تو mysql هم میشه متغیر کردم برام خیلی جالب بود .
set @idmax=(SELECT max(id) FROM `wp_posts` WHERE `post_author`=2);
select * from `wp_posts` where id=@idmax;
بله. به زودی آموزش MySQL همراه با ترفندها رو توی بخش مربوطه شروع میکنم. یکی دیگه از کاربردهای متغیرها:
SET @var:=0;
UPDATE `wp_posts` SET `id`=(@var:=@var+1) ORDER BY `id`;
با این کار، جدول wp_posts شما دوباره به ترتیب از 1 به بعد id میخوره (id ها مرتب میشن) و اگه از کلید خارجی توی وضعیت ON UPDATE CASCADE توی جداول دیگه برای اشاره به پستهای این جدول استفاده شده باشه، بطور خودکار کلیدهای خارجی هم اصلاح خواهد شد.
(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
شما پست ، صفحه، ویرایش یا ضمیمه می خواستین ؟
چون اصلا آخرین آیدی از یک کاربر میتونه فقط یکی از این ها باشد اگر شرطی گداشته نشود.