C# заявка

Knoppix_

Registered
Здравейте, значи искам да направя селект от две таблици в една база на mysql като искам да спазвам няколко условия и след това да ги извеждам в текстови полета
Какво имам предвид
имам форма с лист бокс която извежда записи от таблица шофьори, до тук успях да направя така че като избера шофьора да извеждам информацията която е записана в тази таблица за него, но искам да извеждам още една информация която я има в друга таблица

ето ми го кода

Код:
private void drivers_listbox_SelectedIndexChanged(object sender, EventArgs e)
        {
            string constring = "datasource=localhost;port=3306;username=root;passwor=; charset=utf8;";
            string Query = "select * from spisaci_1.drivers where ime = '" + drivers_listbox.Text + "';";
            MySqlConnection conDataBase = new MySqlConnection(constring);
            MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
            MySqlDataReader MyReader;
            try
            {
                conDataBase.Open();
                MyReader = cmdDataBase.ExecuteReader();
                while (MyReader.Read())
                {
                    string sID = MyReader.GetString("id").ToString();
                    string sIme = MyReader.GetString("ime").ToString();
                    string sPhone = MyReader.GetString("phone").ToString();
                    string sOwner = MyReader.GetString("owner").ToString();
                    


                    ime_drv_txt.Text = sIme;
                    phone_drv_txt.Text = sPhone;
                    onwer_driver_txt.Text = sOwner;
                    id_drv_txt.Text = sID;

                }
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
             
        }

Сега следващата таблица се казва курсове е искам да правя селект с който да извеждам още една променлива която да се казва last_course, като идеята е да взимам стойноста от drivers_listbox.Text и да я придавам там където колона1 е равна на drivers_listbox.Text или колона 2 е равна на drivers_listbox.Text или колона 3 е равна на drivers_listbox.Text
само че нещо не мога да се ориентирам правилно опитах да го направя с тази заяка

Код:
SELECT drivers.id AS driver_id, drivers.ime, drivers.phone, drivers.owner, drivers.images, spisaci.end_date FROM drivers ,spisaci WHERE  drivers.ime = "АТАНАС ЖЕЛЯЗКОВ ХРИСТОВ 5802168440" AND (spisaci.driver_europe = "АТАНАС ЖЕЛЯЗКОВ ХРИСТОВ 5802168440" OR spisaci.driver_europe_2 = "АТАНАС ЖЕЛЯЗКОВ ХРИСТОВ 5802168440" OR spisaci.driver_turkey = "АТАНАС ЖЕЛЯЗКОВ ХРИСТОВ 5802168440" OR spisaci.driver_turkey_2 = "АТАНАС ЖЕЛЯЗКОВ ХРИСТОВ 5802168440") ORDER by spisaci.id LIMIT 1

но тогава ако шофьора го няма в таблицата списъци просто не извежда друга информация

много моля за помощ
 
При положение, че го няма в датабазата, няма как да ти го извежда, ако ен съм разбрал въпроса ще те помоля, да го перефразираш.

Моля, обясни защо след като искаш да вземеш от text поле стойност и да търсиш по нея в датабаза имаш заченка на релация на 2 бази.

SELECT drivers.id AS driver_id, drivers.ime, drivers.phone, drivers.owner, drivers.images, spisaci.end_date

Тук заявката ти е грешна. Избираш едно поле а след AS имаш милиарди.
В 90% от случайте ( говорим за обичайните заявки, тъй като проекта не изисква нещо по-сложно ) AS се ползва за задаване на друго име.

SELECT `drivers`.`id` AS `value` WHERE `smth` = 'smth'

Това е стандартна заявка и презаписва резултата от датабазата да не бъде извикван с ключ името на полето а със зададения от теб ( в случая value ), тоест премахни ги тези работи.

Поздрави!
 
Здравей, ще се опитам да го обесня имам 4 текстбокса

Име: Телефон Собсвеност и Последен курс

Полетата име, телефон и собственост се попълват от таблицата drivers, а полето последен курс се взима от таблица spisaci, това е идеята да имам 2 таблици и се опитвам да ги свържа по някакъв начин.
Така идеята каква е като от листбокса избера Име да ми се попълва информацията която искам проблема ми е при взимането на полето дата .. което се намира в другата таблица

Таблиците са две различни какво трябва да стане ако има запис за този човек само в таблицата шофьори просто дами зарежда тези данни а данните за последен курс да не се зареждат, а ако го има и в двете таблици тогава да ми селектира всичко
 
[sql]SELECT name, phone, property, last_course
FROM table1, table2
WHERE table1.id = table2.id
GROUP BY id[/sql]

Ето това трябва да ти представлява заявката, като проверка за информацията, която си дръпнал си я правиш с код от C#. Така става най-бързо.

Ако искаш може да добавиш ifnull

[sql]SELECT name, phone, property, IFNULL(last_course, 0) as lastCourseValue
FROM table1, table2
WHERE table1.id = table2.id
GROUP BY id[/sql]

Така ако last_course полето ти е празно ти връща 0, ако не, ти връща записа, който съществува - под името lastCourseValue!

Може да се направят 2 отдени заявки, и първата да записва информацията в масив, след това ако втората не е NULL да създава още 1 индекс, ако не не, или пък при вече съществуващ индекс да го държи празен, но тъй като държиш на една заявка.

Удачно ще е да попрочетеш за JOIN и сответно UNION!

И не забравяй, че изчисленията в заявката са винаги по-бавни от тези на кода.

Поздрави!
 

Back
Горе