Pobranie wartości z tabeli

0

Hej wszystkim.

Pisząc aplikację dla klienta napotkałem się z pewnym problemem.
Mianowicie niech ktoś mi podpowie lub pomoże skonstruować zapytanie SQL w którym mogę pobrać wynik tak jak w grafice poniżej.

[https://i.ibb.co/370XQYW/sql.png]

Tzn chcę, żeby po wpisaniu np 1050x1060 pobrało podświetloną wartość

0

Może jakaś struktura bazy?
Niby jak ma ktoś pomóc bez podstawowych informacji?

0

Jeśli faktycznie w bazie masz takie wartości w postaci stringów '1001-1100' to trzeba to chyba w SQL split-nąć i porównać, ale wydaje mi się, ze goła tabela w db tak nie wygląda. To wygląda jak jakieś zagregowane dane.

0

Struktura wyglada tak:

id  int(10) unsigned     
X   char(30)     
600-700 int(10)  
701-800 int(10)  
801-900 int(10)  
901-1000    int(10)  
1001-1100   int(10)  
1101-1200   int(10)  
1201-1300   int(10)  
1301-1400   int(10)  
1401-1500   int(10)  
1501-1600   int(10)

na razie skonstruowałem takie coś:

private void GetCennikNazwa()
        {
            try
            {
                dbConnect();
                string query = "SELECT nazwa FROM cenniki WHERE id='" + comboBox1.SelectedIndex + "'";
                using (MySqlConnection conn = new MySqlConnection(connString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(query, conn))
                    {
                        conn.Open();
                        object id = cmd.ExecuteScalar();
                        if (id != null)
                            nazwaCennik.Text = id.ToString();
                        else
                            nazwaCennik.Text = "No data found";
                    }
                }
                conn.Close();
            }
            catch(Exception ex)
            {
                MessageBox.Show("Nie udało się pobrać nazwy cennika " + ex.Message);
            }
        }

        private void GetSzeroko()
        {
            try
            {
                dbConnect();
                string query = "SELECT X FROM " + nazwaCennik.Text + " WHERE SUBSTRING_INDEX(X, '-', -1) >= '" + xValue.Text + "' AND SUBSTRING_INDEX(X, '-', 1) <='" + xValue.Text + "'";
                using (MySqlConnection conn = new MySqlConnection(connString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(query, conn))
                    {
                        conn.Open();
                        object X = cmd.ExecuteScalar();
                        if (X != null)
                            xV.Text = X.ToString();
                        else
                            xV.Text = "No data found";
                    }
                }
                conn.Close();
            }
            catch(Exception ex)
            {
                MessageBox.Show("Nie można pobrać zakresu dla szerokości " + ex.Message);
            }
        }
private void calculate_Click(object sender, EventArgs e)
        {
            try
            {
                GetSzeroko();
                GetWysoko();
                dbConnect();
                string query = "SELECT `" + xV.Text + "` FROM " + nazwaCennik.Text + " WHERE X = (SELECT `COLUMN_NAME` AS Y FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME`='" + nazwaCennik.Text + "' AND SUBSTRING_INDEX(`COLUMN_NAME`,'-',-1) >= '" + yValue.Text + "' AND SUBSTRING_INDEX(`COLUMN_NAME`,'-',1) <= '" + yValue.Text + "')";
                using (MySqlConnection conn = new MySqlConnection(connString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(query, conn))
                    {
                        conn.Open();
                        object cena = cmd.ExecuteScalar();
                        if (cena != null)
                            wartOkno.Text = cena.ToString();
                        else
                            wartOkno.Text = "No data found";
                    }
                }
                conn.Close();
                LiczCenePoRabacie();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Nie można obliczyć ceny " + ex.Message);
            }
        }

Problem pojawia się w momencie wpisania wartości 1000x1000 bo twierdzi, że szerokość jest null

0

Mi się totalnie nie podoba ten schemat. Zapytania z column name wyglądają dziwnie.
Ja bym to spłaszczył do ludzkiej postaci i wprowadził odpowiednio zakresy

szerokosc_maks, dlugosc_maks, cena
700, 700, 302
700, 800, 318
700, 900, 336
.....
800, 700, 319
800, 800, 338
......

Wtedy zapytanie jest banalne bo dla wymiarów x, y pytasz się o cena dla pierwszego wiersza dla którego x < szerokosc_maks and y < dlugsc_maks order by szerokosc_maks, dlugosc_maks.
Do edycji cennika to możesz sobie taki model stworzyć jak na obrazku.

0

Z tego rozwiązania tabeli korzystałem robiąc kalkulator w php i działo to normalnie wię stwierdziłem, że przeniosę to na C#. W zasadzie to liczy tylko problem jest z pobraniem. Wartości z kolumn 901-1000

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0