نقل قول: مشکل در inner join
این کد رو درست کردم ولی هنوز مقدار صفر رو نمیدونم چطور بدست بیارم
SELECT tbl_sendbasket.customername AS "مشتری", tbl_sendbasket.baskets AS "سبد",
tbl_sendbasket.basketnumbers AS "سبد ارسالی",tbl_recivebasket.basketnumbers AS "سبد دریافتی",
(tbl_sendbasket.basketnumbers - tbl_recivebasket.basketnumbers) AS "سبد باقی مانده",
tbl_sendbasket.sender AS "ارسال کننده", tbl_recivebasket.reciver AS "دریافت کننده"
FROM tbl_sendbasket
INNER JOIN tbl_recivebasket
ON tbl_sendbasket.customercode = tbl_recivebasket.customercode
WHERE tbl_sendbasket.baskets='سبد' AND tbl_recivebasket.baskets='سبد'
نقل قول: مشکل در inner join
باید از کلید خارجی استفاده کنید ... اینکه دو تا فیلد از نوع فارسی رو به هم inner join بزنید اصلا روش مناسبی نیست ... در مواقع اظطرار از این روش استفاده میکنند ..
شما می توانید از کلید خارجی استفاده کنید . ساده ترین راه هست
نقل قول: مشکل در inner join
سلام
customercode که بعد از on گذاشتم حروف فارسی نیست کد فروشندست که یک عدد هستش
یعنی من توی برنامه گفتم جاهایی که کد فروشنده یکیه لود بشه یعنی فقط میثم رو لود کنه تا اینجا مشکلی نیست درست لود میکنه
ولی حالا میخوام بگم که وقتی کد فروشنده یکیه و نوع ظرفش سبد 1 هست رو لود کنه ولی ممکنه توی ظروف ارسالی سبد 1 باشه ولی ظروف دریافتی سبد 1 اصلا دریافتی نداشته باشه
یعنی مثلا 100تا سبد 1 اگه گرفته باشه و هیچ سبد 1 پس نداده باشه خروجیش NULL میشه
چیکار کنم که خروجی null نشه بگه ارسالی 100 و دریافتی 0 و 100-0 =100
نقل قول: مشکل در inner join
نقل قول:
نوشته شده توسط
cnmeysam
سلام
customercode که بعد از on گذاشتم حروف فارسی نیست کد فروشندست که یک عدد هستش
یعنی من توی برنامه گفتم جاهایی که کد فروشنده یکیه لود بشه یعنی فقط میثم رو لود کنه تا اینجا مشکلی نیست درست لود میکنه
ولی حالا میخوام بگم که وقتی کد فروشنده یکیه و نوع ظرفش سبد 1 هست رو لود کنه ولی ممکنه توی ظروف ارسالی سبد 1 باشه ولی ظروف دریافتی سبد 1 اصلا دریافتی نداشته باشه
یعنی مثلا 100تا سبد 1 اگه گرفته باشه و هیچ سبد 1 پس نداده باشه خروجیش NULL میشه
چیکار کنم که خروجی null نشه بگه ارسالی 100 و دریافتی 0 و 100-0 =100
به جای inner join از left join استفاده کنید
نقل قول: مشکل در inner join
البته توصیه میکنم یه یک جدول دیگه داشته باشی و از اونجا به این دوتا left join بزنی ..
اینطوری اگه هر کدوم خالی باشه اون یکی رو میاره
نقل قول: مشکل در inner join
ممنون از راهنماییتون
مشکل اینجاست من تازه کارم تا الان با دیتابیس کار نکردم
میشه همین کد رو برام درست کنید تا بهتر متوجه بشم؟
شرمنده وقتت رو میگیرم بخدا آدم تنبلی نیستم ولی 2روزه هرکاری میکنم خروجی نمیگیرم
نقل قول: مشکل در inner join
نقل قول:
نوشته شده توسط
cnmeysam
ممنون از راهنماییتون
مشکل اینجاست من تازه کارم تا الان با دیتابیس کار نکردم
میشه همین کد رو برام درست کنید تا بهتر متوجه بشم؟
شرمنده وقتت رو میگیرم بخدا آدم تنبلی نیستم ولی 2روزه هرکاری میکنم خروجی نمیگیرم
SELECT tbl_sendbasket.customername AS "مشتری", tbl_sendbasket.baskets AS "سبد",
tbl_sendbasket.basketnumbers AS "سبد ارسالی",tbl_recivebasket.basketnumbers AS "سبد دریافتی",
(tbl_sendbasket.basketnumbers - tbl_recivebasket.basketnumbers) AS "سبد باقی مانده",
tbl_sendbasket.sender AS "ارسال کننده", tbl_recivebasket.reciver AS "دریافت کننده"
FROM tbl_customercode
LEFT JOIN tbl_recivebasket
ON tbl_customercode.id = tbl_recivebasket.customercode
LEFT JOIN tbl_sendbasket
ON tbl_customercode.id tbl_sendbasket.customercode
WHERE tbl_sendbasket.baskets='سبد' AND tbl_recivebasket.baskets='سبد'
یک جدول با نام tbl_customercode ایجاد کنید
2 ضمیمه
نقل قول: مشکل در inner join
سلام
من تیبل رو ساختم یه id هم بهش دادم 2 تا id هم بهش اضافه کردم 1و2 که با کاستومر کدهام یکی باشه
کد شما اول سینتکس ارور میداد
ON tbl_customercode.id tbl_sendbasket.customercode
بین اینها یک AND اضافه کردم حل شد
ولی مشکل هنوز پابرجاست
یعنی توی خروجی بجای 1بار برای هر مشتری مثلا 2بار سبد رو لود و محاسبه میکنه این مدلی و برای دومی اعدادش اصلا توی دیتابیس هم نیست
ضمیمه 147105
بعد ممکنه مثلا سبد 2 ارسال شده باشه ولی دریافت نشده باشه مقدار صفر رو نمیذاره برای دریافت حتی null هم نمیاره الان در حالی که مثلا برای سبد2 باید بگه ارسالی 5 دریافتی 0 و 5-0=5
ضمیمه 147106
نقل قول: مشکل در inner join
نا گفته نمونه توی خود جاوا این مشکل رو این ملی حل کردم
try {
String url ="jdbc:mysql://localhost:3306/fixedprices?user=root&password=&useSSL=false&chara cterEncoding=UTF-8";
Class.forName("com.mysql.jdbc.Driver").newInstance ();
Connection con = DriverManager.getConnection(url);
Statement st =con.createStatement();
Statement st1 =con.createStatement();
Statement st2 =con.createStatement();
Statement st3 =con.createStatement();
Statement st5 =con.createStatement();
Statement st6 =con.createStatement();
int rowcount = -1;
int rowcount2 = -1;
int rowcount3 = -1;
int rowcount4 = -1;
ResultSet resultSet = st.executeQuery("select count(basketnumbers) from tbl_sendbasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+" '");
ResultSet res1Set = st1.executeQuery("select sum(basketnumbers) from tbl_sendbasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+" '");
ResultSet resultSet2 = st2.executeQuery("select count(basketnumbers) from tbl_recivebasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+" '");
ResultSet res1Set2 = st3.executeQuery("select sum(basketnumbers) from tbl_recivebasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+" '");
resultSet.next();
res1Set.next();
resultSet2.next();
res1Set2.next();
rowcount = resultSet.getInt(1);
rowcount2 = res1Set.getInt(1);
rowcount3= resultSet2.getInt(1);
rowcount4= res1Set2.getInt(1);
if(rowcount > 0){
txtsendcount.setText(Integer.toString(rowcount));
txtsendbasket.setText(Integer.toString(rowcount2)) ;
txtcountrecive.setText(Integer.toString(rowcount3) );
txtvalrecive.setText(Integer.toString(rowcount4));
}
if(rowcount3 > 0){
txtsendcount.setText(Integer.toString(rowcount));
txtsendbasket.setText(Integer.toString(rowcount2)) ;
txtcountrecive.setText(Integer.toString(rowcount3) );
txtvalrecive.setText(Integer.toString(rowcount4));
}else{
int val = 0;
ResultSet resSet = st5.executeQuery("select count(basketnumbers) from tbl_sendbasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+"' ");
txtsendcount.setText(Integer.toString(val));
resSet.next();
val= resSet.getInt(1);
txtsendbasket.setText(Integer.toString(val));
int val1 = 0;
ResultSet resSet2 = st6.executeQuery("select count(basketnumbers) from tbl_recivebasket where baskets='"+txtbasket.getText()+"' AND customername='"+txtname.getText()+"' ");
txtcountrecive.setText(Integer.toString(val1));
resSet2.next();
val1= resSet2.getInt(1);
txtvalrecive.setText(Integer.toString(val1));
}
String a = txtsendbasket.getText();
String b = txtvalrecive.getText();
int c = Integer.parseInt(a)-Integer.parseInt(b);
txtsum.setText(Integer.toString(c));
}catch (Exception ex)
{
JOptionPane.showMessageDialog(null, ex.getMessage());
}
ولی فکر میکنم باید راه بهتری باشه که از طریق خود دیتابیس این مشکل حل بشه
نقل قول: مشکل در inner join
همون سوال رو با روش و توضیح کامل تری میپرسم شاید متوجه منظورم بشید
من 2تا تیبل دارم یکیش tbl_send و یکیش هم tbl_receive
برای send ستونهای به این شکل دارم
customercode و baskets و basketnumbers
وبرای receive هم همین ستونها رو دارم یعنی
customercode و baskets و basketnumbers
حالا ممکنه برای یک مشتری با کد یه سبد ارسال کنم یعنی توی جدول سند این جوری میشه
1- سبد خالی 10
و برای مشتری دیگه با کد جدید سبد دیگه ای رو ارسال کنم یعنی این مدلی
2- سبد پر 50
و توی قسمت تیبل دریافت فقط مشتری شماره 1 تعدادی سبد رو پس فرستاده باشه مثلا 7 تاش رو
سوال اینجاست اول چطوری همه محصولات ارسالی و دریافتی رو یکجا ببینم که مشخص باشه مثلا مشتری 1- از من 10 تا سبد خالی گرفته و 7 تا هم پس داده و محاسبه کنم 10-7=3 تا باقی مانده
و دوم مشتری 2- از من 50 تا سبد پر گرفته و چیزی پس نفرستاده و توی خروجی نمایش بده و محاسبه کنه 50-0=50 تا باقی مانده
در اصل 2تا کد نیاز دارم
یکیش باید طبق توضیح بالا همه انواع سبد رو نمایش بده
یکیش هم مثلا فقط سبدهای خالی رو نمایش بده
نقل قول: مشکل در inner join
ممنون از اینکه هرچند کم ولی راهنمایی کردین
به کمک یکی از دوستای خوبم جواب رو پیدا کردم در اصل باید از union استفاده میکردم و کدی که لازم داشتم اینه شاید روشش به درد کسی بخوره
select customercode,customername,baskets,SUM(sendnumber) as sumsend,Sum(recnumber) as sumrecive,SUM(sendnumber)-Sum(recnumber) as mandeh from (select 1 askind,ID,customercode,customername,baskets,basket numbers as sendnumber,0 as recnumber from tbl_sendbasket UNION SELECT 2 as kind,ID,customercode,customername,baskets,0,basket numbersFROM tbl_recivebasket ) k group by customercode,customername ,baskets