MySQL и рел. табл....

32 отговора 1820 прегледа
#1

MySQL и рел. табл....

Колеги помагайте, че съм на зор.
Проблема ми е такъв. Уточнявам че MySQL е 3.23 и не поддържанякои екстри с които вие предполагам работите. Та на въпроса.
Имам две таблици едната е главната/пр. GBD/ БД така да се каже, а другата/пр. GRDAD/ съдържа две колони Пощенски КОД и Име на населеното място. В Главната База данни пр. има колони ІМЕ, РІМЕ ,FAM и adress , но в адрес е пощенския код.
Как да направя заявка, която да ми вади примерно имената и адреса/но не пощенския код а самият адрес / при определени условия.

Предварително Благодаря.

Отговор
в отговор на Koлera #2

Re: MySQL и рел. табл....

колега, къде е адреса в цялата каша не разбрах. разбрах че името на града е във втората таблица - на това ли му викаш адрес?

select t1.IME,t1.PIME,t2.city from t1,t2 where t1.zipcode=t2.zipcode and ...

моля :)

Редактирано от тoшo на

Отговор
в отговор на Koлera #3

Re: MySQL и рел. табл....

Митко не така.
Съветвам те да проиграеш това което предлагаш. Ако беше толкова просто предполагам нямаше да питам.
Така , че въпросът си остава.

Отговор
в отговор на Koлera #4

Re: MySQL и рел. табл....

Извинявам се не Митко а Тошо.

Отговор
в отговор на Koлera #5

Re: MySQL и рел. табл....

Едно уточняващо въпросче - как са вързани двете таблици?

Отговор
в отговор на jel #6

Re: MySQL и рел. табл....

И в двете същества сътветно колана със пощенския код пр. PKOD

Отговор
в отговор на Koлera #7

Re: Никак не беше учтиво.

Не знам на кого си колега, но при положение, че задаваш въпроса си толкова неясно и някой се е опитал въпреки това да ти помогне някак си не върви да му се сърдиш.

Най-лесно става като дадеш пример.
"Имам ей това в таблиците (даваш 3-4 реда от всяка таблица) и искам да получа ей този резултат (даваш примерен резултат)"

И не се сърди на хората които опитват да ти помогнат безплатно.

salle.online.bg/sig
Отговор
в отговор на salle #8

Re: Никак не беше учтиво.

Не исках да обидя никого.
Мисля , че ясно съм описал въпроса си. Освен че съм използвал думата адрес вместо населено място.
Е ако някой се е засегнал , моля да ме извини.

Отговор
в отговор на Koлera #9

Re: Никак не беше учтиво.

Очевидно е, че не си го описал достатъчно ясно, иначе щеше да ти бъде отговорено вече...

Everything louder than everything else...
Отговор
в отговор на Koлera #10

Описание на таблиците и

уточняване на въпроса.
Две таблици да ги кръстим пр. GBD/главна база данни/ и таблица GRAD.
В първата <B>GBD </B> има следните колони :
1. ІМЕ - съдържа малкото име на човек.
2. FAM - съдържа фамилията на човек
3. adress - съдържа пощенския код на опр. населено място.

Във втората <B>GRAD </B> има следните две колони:
1. adress - съдържа пощенския код на опр. населено място.
2. NameGRAD - Името отговарящо на пощен. код на насел. място.

Въпросът ми бе как да се направи заявка която връща примерно :

Всички с фамилия Петрови , но заявката да връща:
ИМЕ, Фамилия и Името на населеното място.

Отговор
в отговор на Aз/koлer./ #11

Re: Описание на таблиците и

Тошо го е написал вече - би трябвало да работи:
SELECT GBD.IME, GBD.FAM, GRAD.NameGRAD FROM GBD, GRAD
WHERE ( GBD.FAM = 'somthing..' and GBD.adress = GRAD.adress);

Отговор
в отговор на jel #12

Re: Описание на таблиците и

Не нестава това съм го пробвал , сървърът просто ми връща отговор от рода:
Име1, Фамилия1
Име1, Фамилия1
Име2, Фамилия2
Име2, Фамилия2
Име3, Фамилия3
Име3, Фамилия3
и т.н. тоест удвоява заявката , а пък адреса въобще го няма.

Отговор
в отговор на Aз #13

Re: Описание на таблиците и

леле колега :))

мда.

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

а иначе не се обиждам, даже ме развесели :)

Отговор
в отговор на тoшo #14

Re: Описание на таблиците и

Извинявам се и на теб лично. Не исках да прозвучи така.
Но и аз започнах от тази заявка. Но няма грешка така е както съм я описал.
Незнам защо той/сървъра/ я разбира като пълно обединение.
Ще огледам пак и ще я напиша.

Отговор
в отговор на Aз #15

Re: Сървърът право това което му кажеш

А не това което искаш

Дай все пак заявката да видим какво правиш.

salle.online.bg/sig
Отговор
в отговор на salle #16

Re: Сървърът право това което му кажеш

Извинявам се/отново и особено на Тошо/ за релацията сте прави моя програмна грешка и за това не съм виждал последната колона, НО проблема с дублирането на записите остана.

select GBD.*, Grad.IMEGRAD from GBD, GRAD WHERE GBD.KODGRAD= GRAD.KODGRAD;

И в резултат повтарящи се по двапъти записи

Отговор
в отговор на Aз #17

Re: Сървърът прави това което му кажеш

Ами ако има повтарящи се редове в поне една от таблиците естествено, че ще получиш и повтарящи се редове в резултата.

Няма да има повторения само ако и в двете таблици KODGRAD е уникално.

В твоя случай просто добави DISTINCT щом не искаш повторенията

select DISTINCT
GBD.*, Grad.IMEGRAD from GBD, GRAD WHERE GBD.KODGRAD= GRAD.KODGRAD;

Между другото най-широко разпространената конвенция за SQL е да изписваш резервираните думи и функциите с главни букви а имената с малки. (Имената на бази данни, таблици и колонки)

salle.online.bg/sig
Отговор
в отговор на salle #18

Re: Сървърът прави това което му кажеш

Прав си , аз не поставях distinct защото мислех, че не точно това ще се получи, но ти си напълно прав. Благодаря. :)))
И един дискусионен въпрос , за да не поставям нова тема.
Възможно ли е сървър MySQL3.23 да греши при заявка от рода:


SELECT * FROM gbd WHERE ime LIKE 'ф%'

става въпрос за тривиално търсене по част от стринг.
Забелязах, че когато търси по една , а понякога и по две букви той греши като извежда и други записи. Но когато са повече от три , никога не греши.

Отговор
в отговор на Aз #19

Re: Сървърът прави това което му кажеш

Всъщност, най-вероятно не греши той, а този който ти е инсталирал MySQL сървъра. За 3.23.хх трябва да го научиш че трябва да работи с кирилица. По default е с чарсет latin1, a за български ти трябва cp-1251.
Става като в my.ini
[mysqld]
......
default-character-set=cp1251
След това най-вероятно ще ти се наложи да пресъздадеш индексите. Темата е много дискутирана, защо така става, но в резюме: в latin1 charset, който най-вероятно имаш инсталиран буквата Ф изглежда катo I с две точки отгоре, и прилича на х (малко хъ), което е малко I с две точки и т.н., като ти е кей инсенситив търсенете ..... спирам, че и аз се оплетох в собственото си обяснение, надявам се да си ме разбрал

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #20

Re: Сървърът прави това което му кажеш

Добавих го рестартирах сървъра и стана
Благодаря.

Отговор