• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در کوئری
#1
من یک جدول در دیتابیس دارم که دو ستون داره ، ستون اول شماره فرد است و ستون دوم رشته ای که فرد در آن تخصص دارد .اما این جدول سطرهایی دارد که شماره تکراری دارد ولی رشته اش متفاوت است من می خواهم ستون دوم آپ دیت شود ،مثلا می خواهم جدول اولی به جدول دومی تبدیل شود:
1 فیزیک
2 ریاضی
1 کامپیوتر
3 شیمی
3 ریاضی

1 فیزیک-کامپیوتر
2 ریاضی
3 شیمی-ریاضی

چه جوری می شه؟
HuhConfused
  پاسخ
تشکر شده توسط :
#2
بسم الله الرحمن الرحیم
سلام
از این کوئری استفاده کن:
کد پی‌اچ‌پی:
insert into table2(id2darsomashgh2select id1darsomashgh1 from table1 ON DUPLICATE KEY UPDATE darsomashgh2=concat_ws(',',darsomashgh2,darsomashgh1

راستی فیلد id تو فیلد دوم باید یونیک باشه
  پاسخ
تشکر شده توسط : zeynab
#3
حسین جان از کوئریت بیشتر میگی؟ مرسی Heart
غایب
  پاسخ
تشکر شده توسط :
#4
چیز خاصی نداره:
کد پی‌اچ‌پی:
insert into table2(id2darsomashgh2
این قسمتش که واضحه / مقادیری که توسط کوئری زیر می یاد رو وارد دیتابیس می کنه:
select id1, darsomashgh1 from table1

---
در مورد این قسمت ON DUPLICATE KEY
شما اگه به فیلدی که یونیک هست مقدار تکراری بدی خطایی می گیری که همچین مقداری برای ایین فیلد وارد شده و هست/ این تکه کد بالایی هم می گه اگه همچین مقداری تو دیتابیس بود که دیگه خطا نده و یکار دیگه کنه (آپدیت کنه) / :
کد پی‌اچ‌پی:
ON DUPLICATE KEY UPDATE darsomashgh2=concat_ws(',',darsomashgh2,darsomashgh1
این تکه کد زمانی اجرا می شه که مقداری که می خواهیم وارد کنیم قبلا در فیلدمون وارد شده و اگه قبلا وارد نشده بود این اجرا نمی شه
در حقیقت از اجرای چند کوئری واسه پرس و جو و بعد آپدیت یا اینسرت جلوگیری می کنه

concat_ws(',',darsomashgh2,darsomashgh1)
این تکه کد هم پارامتر اولش کلمه ای هست که مقادیر از هم جدا می شن و پارامترهای بعدیش هم مقادیری هستند که پارامتر اولی بینشون قرار خواهد گرفت و سپس نتیجه دلخواه رو می ده و در دیتابیس می ریزیم (یا هر کاری که دوست داریم)
- با پارامتر دومی مقدار فعلی رو می گیره (چون نمی خواهیم مقدار فعلی حذف بشه وباید مقدار جدید کنارش باشه)
- سپس یدونه , گذاشته می شه و با پارامتر دومی هم مقداری که می خواهیم کنار مقدار فعلی باشه رو می گیریم

**** تعداد پارامترهایی این تابع هم محدودیتی درش وجود نداره / فقط پارامتر اولی جداکننده هست و باقیش هم که مقدار کاربر
  پاسخ
تشکر شده توسط : cyletech zeynab
#5
کد:
concat_ws(',',darsomashgh2,darsomashgh1)
در مورد کد بالا ، آیا لطفا ببین درست متوجه شدم. اگر اون ستون تکراری بود یعنی از پیش وجود داشت ، مقدارش رو نگه داره (پارامتر سوم رو وارد می کنیم تا حذف نشه) و یک "," بینش قرار بده و پارامتر دوم رو کنارش وارد کنه.
گر درست هست حرفم یا نه ، این رو هم لطفاً بگو که آیا فقط مخصوص فیلد یونیک هست؟ مرسی Angel
رفتم سراغ کتابچه اش. اگر سوالی بود در تاپیک جداگانه می پرسم. مرسی . ON DUPLICATE KEY UPDATE
غایب
  پاسخ
تشکر شده توسط :
#6
(۱۳۹۰ خرداد ۲۵, ۰۸:۱۲ ب.ظ)zeynab نوشته: من یک جدول در دیتابیس دارم که دو ستون داره ، ستون اول شماره فرد است و ستون دوم رشته ای که فرد در آن تخصص دارد .اما این جدول سطرهایی دارد که شماره تکراری دارد ولی رشته اش متفاوت است من می خواهم ستون دوم آپ دیت شود ،مثلا می خواهم جدول اولی به جدول دومی تبدیل شود:
1 فیزیک
2 ریاضی
1 کامپیوتر
3 شیمی
3 ریاضی

1 فیزیک-کامپیوتر
2 ریاضی
3 شیمی-ریاضی

چه جوری می شه؟
HuhConfused


می خوای کلا جدولت رو تغییر بدی یا می خوای یه select بزنی که اون نتیجه رو داشته باشه؟
  پاسخ
تشکر شده توسط :
#7
(۱۳۹۰ خرداد ۲۶, ۱۲:۲۸ ب.ظ)admin نوشته:
(۱۳۹۰ خرداد ۲۵, ۰۸:۱۲ ب.ظ)zeynab نوشته: من یک جدول در دیتابیس دارم که دو ستون داره ، ستون اول شماره فرد است و ستون دوم رشته ای که فرد در آن تخصص دارد .اما این جدول سطرهایی دارد که شماره تکراری دارد ولی رشته اش متفاوت است من می خواهم ستون دوم آپ دیت شود ،مثلا می خواهم جدول اولی به جدول دومی تبدیل شود:
1 فیزیک
2 ریاضی
1 کامپیوتر
3 شیمی
3 ریاضی

1 فیزیک-کامپیوتر
2 ریاضی
3 شیمی-ریاضی

چه جوری می شه؟
HuhConfused


می خوای کلا جدولت رو تغییر بدی یا می خوای یه select بزنی که اون نتیجه رو داشته باشه؟
در این پروژه می خوام جدولم را تغییر بدم ، اما دستور select رو هم نمی دونم.Dodgy
  پاسخ
تشکر شده توسط :
#8
بسم الله الرحمن الرحیم
سلام
نه علیرضا جان / (عملی که انجام می شه اینه ولی کار این تابع این نیست)
این تابع چند مقدار / رشته رو به هم وصل می کنه توسط پارامتری اولی که تعیین می شه

و تو این کوئری چون می خواهیم مقداری جدید رو به مقدار فعلی اضافه کنیم اگه از این تابع استفاده نکنیم مقدار قبلی حذف می شه و با مقدار جدید جایگزین می شه که ما اینو نمی خواهیم

و توسط پارامتر دومی مقدار فعلی رو گرفتیم و پارامتر سومی هم مقدار جدیدی است که باید کنار مقدار فعلی مون قرار بگیره (و این تابع این دو رشته رو به هم وصل کرده) و سپس تو دیتابیس آپدیت بشه //
نکته: که می تونید مقدار حدید رو جلوتر یعنی به پارامتر دومی بدی و مقدار قبلی رو به پارامتر سومی بدی (که این به سلیقه کاربر بستگی داره)

توضیح کتابی که ازش یاد گرفتم اینطوری گفته:
کد پی‌اچ‌پی:
concat_ws(seps1,...,sn
رشته های s1 تا sn را در یک رشته الحاق می کند٬ به طوری که هر رشته با جدا کننده Sep از هم جدا شوند.
  پاسخ
تشکر شده توسط : Padideh cyletech


پرش به انجمن:


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