problemche

14 отговора 420 прегледа
#1

problemche

Zdrasti. imam sledniq problem. trqbva da pravq razspisanie za prevozi. i imam 2 koloni v tablicata : ednata e otkyde se trygva (fromc), drugata e kyde pristiga (toc). ima nrmalizaciq, t.e. imam si otdelna tablica koqto mi dyrji gradovete. obache kogato napisha sql-a: select table.id, gradove.value as fromgrad, gradove.value as tograd from gradove, table where table.id = 5 and fromc = gradove.id and toc = gradove.id, ne mi izkarva rezultati. Estestveno zashtoto gradove.id v tova uslovie ne moje da e ravno i na ediniq i na drugiq grad. ako premahna uslovieto za toc = gradove.id naprimer i stane: select table.id, gradove.value as fromgrad, gradove.value as tograd from gradove, table where table.id = 5 and fromc = gradove.id; rezultatite mi imat vida:
x, grad1, grad1. kak da napisha sql-a taka che da si izkaram gradovete kakto trqbva, t.e x, grad1, grad2.
10x

Отговор
в отговор на Lele #2

Re: problemche

ако пък разбрах нещо...

Отговор
в отговор на Topбaлaн #3

eto pak

sorry, shte obqsnq po-podrobno.


------------------------------- ----------------------------
| razspisanie | | cities |
------------------------------- ----------------------------
id | trygva_ot_grad | pristiga_vyv_grad | | id | value |
------------------------------- ----------------------------
1 | 5 | 7 | | 2 | Varna |
------------------------------- ----------------------------
2 | 2 | 7 | | 5 | Burgas |
-------------------------------- ----------------------------
| 7 | Pleen |
---------------------------------------------------------------

kogato napisha:
SELECT razspisanie.id, cities.value as trygva_ot_grad, cities.value as pristiga_v_grad from razspisanie, cities where razspisanie.id = 1 and trygva_ot_grad = cities.id and pristiga v grad = cities.id;
rezultatite imat vida:

-----------------------------
id | trygva_ot_grad | pristiga_v_grad |
-----------------------------
1 | Varna | Varna |
-----------------------------

Ta, vyprosyt mi beshe, kak moga da si gi polucha taka:

-----------------------------
id | trygva_ot_grad | pristiga_v_grad |
-----------------------------
1 | Varna | Pleen |
-----------------------------

Ili da pocheta za self joins?. Mai tova shte da e
P.S.tova \[pre\] me poburka...

Отговор
в отговор на Lele #4

Re: problemche

10x za pomoshta. stana s join kakto ochakvah.

Отговор
в отговор на Lele #5

Re: че ти и в началото имаше Join

просто ти трябва таблицата с градовете 2 пъти да я свържеш

select table.id, g1.value as fromgrad, g2.value as tograd
from table, gradove as g1, gradove as g2
where table.id = 5
and fromc = g1.id and toc = g2.id;

salle.online.bg/sig

Редактирано от salle на

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

Re: че ти и в началото имаше Join

tochno tova napravih, no mi e za pryv pyt da izpolzvam podobni hvatki i mi trqbvashe malko vreme

Отговор
в отговор на Lele #7

Re: назад към учебниците :)

Никакви хватки не са това.

Релационтите Бази Данни дефинират Таблиците като множества от редове.

В случая от едното множествн - на градовете ти трябват две подмножества и затова за момент си го представяш като две множества
т.е. Градовете се представят като Градове за пристигане и Градове за Тръгване ако искаш

И ако се го нарисунаш на хартия ще получиш нещо като формулата на водата H20 - три кръгчета

Мисли по този начин и нямаш проблеми.

SQL не е език за програмиране

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

Re: назад към учебниците :)

xuxu:-) opredeleno sym po-dobyr v programiraneto otkolkoto v bazite danni, a pyk diskretnata matematika mnogo me kefi, no i tq mi e ot slabite tochki

Отговор
в отговор на Lele #9

Re: нe значи съм познал ...

това е ключов момент и повод за много обърквания.

Като се опиташ да си представиш Таблиците като Масиви (както повечето програмисти по инерциа правят) или Списъци и после се чудиш защо така и така.

Всичко е много просто - Теория на Множествата

* Таблиците са НЕПОДРЕДЕНИ Множества От Еднакви Елементи (редове).

* WHERE - вади Подмножество от дадено Множество
* Join - прави Обединение или Сечение на множества
в зависимост от условията.

Извод (адски важен между другото):
Понеже при ВСЯКА операция върху множества резултатът пак е множество (дори и да е Празно Множество) то

Резултатът от всяка SQL заявка е Таблица. Дори да е едно число това е таблица 1x1

Следващите изводи:
Тъй като таблиците са множества:
* забравяш понятието Цикъл.
* забравяш понятието Време — по точно подреба във времето.

При множествата такива животно няма нали?

Има "за всеки елемент от множеството" или "за дадено подмножество" да се направи това и това.

Само, че както почти навсякъде в математиката всичко се случва "изведнъж"

Можеш да кажеш, че искаш Резултатът от операцията да бъде "подредено множество" - превеждаме на SQL:
SELECT .... ORDER BY ...

Дреболийки обаче от тези дето обръщат колата

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

Re: нe значи съм познал ...

Ami eto, tezi neshta za mnojestvata ne se bqh zamislql dosega za tqh, ama te i teq nashite profesori sa mnogo zle i to ne samo s bazite danni..., i pak nie trqbva da nasochvame karucata

Отговор
в отговор на Lele #11

Re: хммм

Да зема да се захвана с преподаване а?


Ама като съм прост инженер - никога няма да ме направят професор и това си е

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

Re: хммм

Ami mai nqma da stane, edva li shte imash tyrpenieto da govorish cqla godina za Paskal na pyrvokursnici koito boravqt samo s ME ili SE

Отговор
в отговор на salle #13

Re: хммм

Още едно доказателство, че инженерите сме като дялани камъни
Хеле пък железарите

Отговор
в отговор на salle #14

преподавател не знам...

ама вярно имаш много ясна мисъл, и хубаво я изразяваш...

Отговор
в отговор на salle #15

:)

а обхождането на курсор цикъл ли е или...

Отговор