Loading...
vladislav_hadzhiyski avatar vladislav_hadzhiyski 66 Точки

[SQL] SQL Join tables

Здравейте,

Пиша едно уеб приложение като разширение на това, което Марио Пешев направи на PHP workshop- a. Единствената разлика е че моето е с фирми и служители. Имам страница която визуализира информация за всеки служител обаче ако служителя няма фирма малко се оплескват нещата. 

SQL query code -> link

Въпроса ми всъщност е има някакъв начин да се комбинират двете заявки в една за да може, когато даден служител има фирма/и да се върне информация за фирмата/ ите и когато няма да връща NULL?

Тагове:
1
PHP Web Development Basics
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

Нещо не ми отваря нищо във фидъла, който си дал. Но това, за което говориш се казва LEFT JOIN. Той вади резултати и когато няма изявена релация за съответния запис, връщайки NULL.

0
vladislav_hadzhiyski avatar vladislav_hadzhiyski 66 Точки

Странно наистина, на мен ми отваря кода. Знам за варианта с LEFT JOIN- a но идеята ми беше ако може да се напише една заявка която хем да изкарва фирмите в който работи един служител хем да изкарва NULL ако не работи никъде. Може би аз не съм си направил и правилно базата, но идеята е всеки служител да знае в кой фирми работи и всяка фирма да знае кои са и служителите, като за целта съм направил междинна таблица която държи id на служител и id на фирма (релация Many to many).

0
vladislav_hadzhiyski avatar vladislav_hadzhiyski 66 Точки

Утре (тоест днес) ако идваш на лекция ще може ли да ти покажа кода за да ми обясниш нещата? Разбира се ако нямаш нищо против.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Явно е от браузърите, на този компютър ми се отваря вече фидъла.

Тръгваш от таблицата employee_company съответно ще ти изкара за всеки един запис в нея - джойннатите редове и ако нещо не съответства на запис в нея - NULL.

Само, че всички компании са покрити - имаш хора за всяка една компания и записите са ОК. Няма за какво да ти покаже записа Test, защото не е нужно.

Нали идеята е да ти покаже работниците, които имат или нямат компания. Трябва да тръгнеш от работниците и да закачаш към тях таблици

SELECT e.name, e.surname, c.name as company_name
FROM employees e
LEFT JOIN employee_company ec
ON ec.employee_id = e.id
LEFT JOIN companies c
ON ec.company_id = c.id

2
05/11/2014 08:25:51
rvmladenov avatar rvmladenov 293 Точки

Като допълнение към "... има ли някакъв начин да се комбинират двете заявки ... " мога да ти предложа да разгледаш и UNION. По принцип е доста просто и това, което прави е да обединява 2 SQL заявки. Пример:

select column1, column2 from table1 where column1 = 'value'
union
select column1, column2 from table1 where column1 = 'value2'

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

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

select column1, column2, column3 from table1 where column1 = 'value'
union
select column1, column2, '' from table1 where column1 = 'value2'

1
05/11/2014 09:30:16
mpeshev avatar mpeshev Trainer 98 Точки

Колега, framework-ът не е production-ready, след като е подготвен в рамките на 3-4 часа. Както споменах по време на workshop-а, повечето фреймуърци имат по над 10 хиляди часа време за архитектура, разширяване, филтриране, сигурност, оптимизации, performance и прочие, така че определено бих препоръчал използването на някой от тях като установен пример с реални проекти.

Създаването на framework-а беше предимно с учебна цел, за да се демонстрира процеса на работа на един фреймуърк, по какъв начин работи архитектурата, как се връзва MVC-то отвътре, как може да се оптимизира и преизползва достатъчно код. Има доста неща за оправяне от гледна точка на escaping, security validations/filtering, повече performance бонуси, по-сложни връзки в моделите, lazy loading и какво ли още не, така че не го считайте за ултимативна уеб платформа :)

2
vladislav_hadzhiyski avatar vladislav_hadzhiyski 66 Точки

Здравейте,

Точно Вашият workshop ме грабна тотално относно MVC на PHP. От тогава досега натрупах известен опит на Laravel и сега просто реших да се опитам да направя нещо от нулата като стъпя на основата, която беше положена на workshop- a. Понеже нямам голям опит с SQL затова и отворих темата за обогатя знанията си по SQL. Няма да го пускам в production просто го използвам за учебни цели.

2
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.