• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
دستورات خاص در mysql+توضیحات دقیقتر
#1
سلام.
من یک جدول توو دیتابیس دارم.
این شکلی:
[عکس: Untitled_1_copy.jpg]
همونطور که میبینین در سطر meta_key متغیرهای زیادی داریم.

همونطور هم یک فرم داریم که تعدادی input داره.

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

مشکل من اینه:

میخوام همزمان متغیرایی که مقدار meta_key اونا price هستن رو پیدا کنه و مقدار meta_value همون سطر و اونایی که مقدار meta_key اونا varaible هست رو پیدا کنه و مقدار meta_value همون سطر رو اکو کنه.

اینم دستور select منه:
کد پی‌اچ‌پی:
    $sql=mysql_query("SELECT * FROM wp_posts LEFT JOIN wp_postmeta ON wp_posts.ID=wp_postmeta.post_id where wp_posts.post_status='publish' and wp_posts.post_type='product' group by wp_posts.ID desc"); 
  پاسخ
تشکر شده توسط :
#2
با دستورات foreach میشه کاری کرد؟
  پاسخ
تشکر شده توسط :
#3
کمی دقیق تر:

اینم جدول php منه:میخوام اینطوری بشه

[عکس: e2875e680435fbb7229c59b6d014e61af83aeb1c.jpg]



ببینید من یه جدول توو html دارم:

[عکس: 7050339d1c934143d90f9ea3ac42544443c64f2f.jpg]
کد پی‌اچ‌پی:
<?php 
 
include('database/database.php');
 
$sql=mysql_query
("SELECT * FROM wp_posts LEFT JOIN wp_postmeta ON wp_posts.ID=wp_postmeta.post_id 
where wp_posts.post_status='publish' and wp_posts.post_type='product' option by wp_posts.ID desc"
);
while(
$row=mysql_fetch_array($sql)) {
 
$ID$row['ID'];
 
$post_title=$row['post_title'];
 
$meta=$row['meta_key'];
 if(
$meta='_price'){$price='تومان';}
 if(
$meta='_stock'){$num='تعداد';}
 
 
?> 
 <tr class="" style="direction: rtl;">
 <td><?php echo $ID?></td>
 <td><?php echo $post_title?></td>
 <td><?php echo $num?></td>
 <td class="center"><?php echo $price?></td>
 <td><a class="edit" href="javascript:;">ویرایش</a></td>
 <td><a class="delete" href="javascript:;">حذف</a></td>
 </tr>
<?php }
 
?>
مشکل من اینجاست که همونطور که توو عکس میبینین پارامتر های مورد نیاز من داخل یک ستون قرارگرفته و با دستورات if و else اونا رو تفکیک کردم.

اما این کار میشد فقط برای meta_key میشد به کار برد.

اما برای مقدار meta_value مشکل دارم.نمیتونم مقدار عددی اونا رو بدست بیارم
  پاسخ
تشکر شده توسط :
#4
[عکس: e2875e680435fbb7229c59b6d014e61af83aeb1c.jpg]
مثال عملی:

ما الان یک post_id داریم به شماره 1800

الان پارامترهایی توو دیتابیس داریم که post_id اونا باهم برابره اما میزان meta_key و meta_value اونا باهم متغیره

من میخوام مقدار meta_value گزینه هایی که meta_key اونا برابر با price_ و stoch_ برام اکو کنه و برای هرکدوم یک متغیر جداگانه تعریف کنه

مثل:

کد پی‌اچ‌پی:
$price$row['meta_value']بشرطی که $row['meta_key']='_price';
 
$stoch$row['meta_value']بشرطی که $row['meta_key']='_stoch'
  پاسخ
تشکر شده توسط :
#5
با دستورات نال میشه کاری کرد؟؟
  پاسخ
تشکر شده توسط :
#6
سلام
خیلی سخت توضیح دادید، دقیقا متوجه نشدم چی لازم دارید
ولی اون چیزی که من فهمیدم نیاز دارید دستور خاصی نداره و باید با دستور if یا switch یا... چک کنید و متغیر price و num رو تعریف کنید.
چون توی جدول همه توی یه ردیف نیتن که بتونید فقط با دستور sql جداجدا فراخونی کنید
  پاسخ
تشکر شده توسط :
#7
داداش من میخوام توو هر خط از هر اطلاعات یکی اکو بشه.
الان تعداد و قیمت اینطوری نیست.
تعداد، خط اول اومده قیمت، خط دوم.
توو تصویر که واضحه منظورم چیه؟؟؟
درمورد همین سوییچ هم که کد گذاشتم اگه میتونی بازنویسی کن.ممنون
  پاسخ
تشکر شده توسط :
#8
این کوئری اون چیزیه که شما میخوای

کد:
$query="select meta_id, max(case when meta_key = '_price' then meta_value end) price, max(case when meta_key = '_stock' then meta_value end) stock from TABLE_NAME group by post_id";

$price= $row['price'];
$stock= $row['stock'];
فقط فیلدها رو چک کن اگه نیاز به تغییر داره درستشون کن مثل اسم جدول و...
  پاسخ
تشکر شده توسط :
#9
داداش حسم میگه تابعت درسته اما یه خرده پیچیده نوشتی

این کوئری منه.

اگه زحمت نیست خودت جایگذاری کن
کد پی‌اچ‌پی:
$sql=mysql_query
("SELECT min wp_posts.ID, wp_postmeta.post_id, wp_posts.post_title, post_status, wp_postmeta.meta_value, wp_postmeta.meta_key FROM wp_posts LEFT JOIN wp_postmeta ON wp_posts.ID=wp_postmeta.post_id 
where wp_posts.post_status='publish' and wp_posts.post_type='product' and wp_postmeta.meta_key='_price' or wp_postmeta.meta_key='_stock' and wp_postmeta.post_id > '1000' order by wp_posts.ID desc"
);

$num=null;
while(
$row=mysql_fetch_array($sql)) {
 
$ID$row['ID'];
 
$post_title=$row['post_title'];
 
$meta=$row['meta_key'];
 
$value=$row['meta_value'];
 if(
$meta='_price'){$price=$value 'تومان';}
 if(
$meta='_stock'){$num$value 'تعداد';}
 if(
$num!=null){
 
?> 
 
 
 <tr class="" style="direction: rtl;">
 <td><?php echo $ID?></td>
 <td><?php echo $post_title?></td>
 <td><?php echo $num?></td>
 <td class="center"><?php echo $price?></td>
 <td><a class="edit" href="javascript:;">ویرایش</a></td>
 <td><a class="delete" href="javascript:;">حذف</a></td>
 </tr>
<?php $num=null; } }
 
?>
  پاسخ
تشکر شده توسط :
#10
اینو تست کن اگه کار نکرد خودت ویرایشش کن و اجرا کن که مشکلش حل بشه، چون من نمیتونم تست کنم
کد:
("SELECT min wp_posts.ID, wp_postmeta.post_id, wp_posts.post_title, post_status, max(case when wp_postmeta.meta_key = '_price' then wp_postmeta.meta_value end) price, max(case when wp_postmeta.meta_key = '_stock' then wp_postmeta.meta_value end) stock FROM wp_posts LEFT JOIN wp_postmeta ON wp_posts.ID=wp_postmeta.post_id
where wp_posts.post_status='publish' and wp_posts.post_type='product' and wp_postmeta.meta_key='_price' or wp_postmeta.meta_key='_stock' and wp_postmeta.post_id > '1000' group by wp_postmeta.post_id order by wp_posts.ID desc");
راستی سعی کن از mysql استفاده نکنی، چون توی php7 دستوراتش پشتیبانی نمیشه. یا mysqli بزن یا pdo
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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