select z tabeli na podastawie danych z innej tabeli

2014-07-23 22:48:44 Post #1 gość_Artur

 
-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `wykonawcy`
--

CREATE TABLE IF NOT EXISTS `wykonawcy` (
  `WykonawcaID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `OsobaID` int(10) unsigned DEFAULT NULL,
  `ZespolID` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`WykonawcaID`),
  UNIQUE KEY `OsobaID` (`OsobaID`),
  UNIQUE KEY `ZespolID` (`ZespolID`),
  KEY `OsobaID2` (`OsobaID`),
  KEY `ZespolID2` (`ZespolID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=886 ;

--
-- Zrzut danych tabeli `wykonawcy`
--

INSERT INTO `wykonawcy` (`WykonawcaID`, `OsobaID`, `ZespolID`) VALUES
(1, NULL, 1),
(2, NULL, 2),
(3, NULL, 3),
(4, NULL, 4),
(5, NULL, 5),
(6, NULL, 6),
(7, NULL, 7);
(7, NULL, 7),
(7, 1, NULL),
(9, 2, NULL),
(10, 3, NULL);

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `wyk_osoby`
--

CREATE TABLE IF NOT EXISTS `wyk_osoby` (
  `OsobaID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Nazwa` varchar(60) COLLATE utf8_polish_ci NOT NULL,
  PRIMARY KEY (`OsobaID`),
  UNIQUE KEY `OsobaNazwa` (`Nazwa`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=179 ;

INSERT INTO `wyk_osoby` (`OsobaID`, `Nazwa`) VALUES
(1, 'Ada Rusowicz'),
(2, 'Adam Ant'),
(3, 'DJ BoBo');

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `wyk_zespoly`
--

CREATE TABLE IF NOT EXISTS `wyk_zespoly` (
  `ZespolID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Nazwa` varchar(60) COLLATE utf8_polish_ci NOT NULL,
  PRIMARY KEY (`ZespolID`),
  UNIQUE KEY `ZespolNazwa` (`Nazwa`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=836 ;

--
-- Zrzut danych tabeli `wyk_zespoly`
--

INSERT INTO `wyk_zespoly` (`ZespolID`, `Nazwa`) VALUES
(1, '10,000 Maniacs'),
(2, '10CC'),
(3, '2 Eivissa'),
(4, '2 Plus 1'),
(5, '2 Unlimited'),
(6, '2Tm2,3'),
(7, '3-11 Porter');

--
-- Ograniczenia dla zrzutów tabel
--

--
-- Ograniczenia dla tabeli `wykonawcy`
--
ALTER TABLE `wykonawcy`
  ADD CONSTRAINT `wykonawcy_osoby_fk` FOREIGN KEY (`OsobaID`) REFERENCES `wyk_osoby` (`OsobaID`),
  ADD CONSTRAINT `wykonawcy_zespoly_fk` FOREIGN KEY (`ZespolID`) REFERENCES `wyk_zespoly` (`ZespolID`);

Tabela wykonawcy łączy tabele wyk_zespoly i wyk_osoby, w jaki sposób znaleźć wykonawcy.WykonawcaID , i wyk_zespoly.Nazwa, ewentualnie samo wykonawcy.WykonawcaID dla zespołu o nazwie '2 Plus 1' ?

2014-07-24 06:31:16 Post #2 nospor

 
Musze juz wychodzic wiec na szybko napisze ci, ze musisz uzyc poprostu LEFT JOIN do połączenia ze sobą tabel po odpowiadających im polach oraz uzyc WHERE dla określenia warunku, po ktorym chcesz szukac (czyli where wyk_zespoly.Nazwa=''2 Plus 1')

2014-07-24 07:13:15 Post #3 gość_Artur

 
Rozumiem że gdybym chciał wyświetlić wszystkie to bez where? left join z on? Popróbuje

2014-07-24 11:24:10 Post #4 nospor

 
Tak, wszystkie bez where.
Tak, LEFT JOIN z ON

2014-07-24 21:23:22 Post #5 gość_Artur

 
Dzięki działa coś takiego
SELECT `w`.`WykonawcaID`,`z`.`Nazwa` FROM `wykonawcy` as `w` join `wyk_zespoly` as `z` on `w`.`ZespolID` = `z`.`ZespolID`
z left join wyskakiwały mi też te wartości w których kolumna wyk_zespoly.nazwa miała wartosc null. A co zrobić żeby pobrać jeszcze wyk.osoby.nazwa i umieścić ją w tej samej kolumnie co nazwa zespołu

2014-07-24 21:52:29 Post #6 nospor

 
Dodac kolejne JOIN. Po to one są - by dodawac kolejne tabele

2014-07-24 23:14:42 Post #7 gość_Artur

 
SELECT `w`.`WykonawcaID`,`z`.`Nazwa` `o`.`Nazwa` FROM `wykonawcy` as `w` join `wyk_zespoly` as `z` on `w`.`ZespolID` = `z`.`ZespolID  join `wyk_osoby` as `o` on `w`.`OsobaID` = `o`.`OsobaID
dodałem ale wtedy zwraca pusty wynik

2014-07-25 09:01:56 Post #8 nospor

 
Masz źle zaprojektowaną tabele Wykonawcy, a ogolnie logike tego.
1) Napisz mi prosze co ta tabea miała robić.
2) Napisz mi prosze ogolny zamysl tych wszystkich trzech tabel

2014-07-25 17:26:44 Post #9 gość_Artur

 
Baza danych ma przechowywać informacje o artystach, powiązanych z nimi utworach, płytach, itp.

W tej chwili w oryginale są na razie 4 tabele, w dalekiej przyszłości dorzucę tabele dla płyt, łączącą utwory i płytę

1 - utwory - informacje na temat utworu (utworID, WykonawcaID, Tytuł, rok wydania, itp.)
2 - zespoły - informacje o zespołach (ZespolID, biografia, data powstania, zakończenia działalności, kraj, nazwa zespołu, ciekawostki, itp.)
3 - osoby - informacje o osobach (artystach) - (OsobaID, imię i nazwisko używane, prawdziwe imię i nazwisko, biografia, kraj, data urodzenia, data śmierci, ciekawostki, itp.)
4 - wykonawcy - łączy w jedną tabelę wszystkich artystów i zespoły żeby można było dopiąć wykonawce do utworu, wykonywanego przez zespół albo wokalistę

a może zrobić jedną tabelę wykonawcy i w niej wszystkie pola które chce mieć zarówno w osobach jak i w zespołach, dodatkowo pole typ (osoba/zespół) i w zależności od tego jak wybiorę typ, wypełnię pola które są tylko dla artysty / zespołu i te które wspólne.

2014-07-25 17:34:46 Post #10 artur

 
przypomniałem sobie hasło więc piszę już ze swojego konta.

To zdanie "W tej chwili w oryginale są na razie 4 tabele, w dalekiej przyszłości dorzucę tabele dla płyt, łączącą utwory i płytę" powinno być "W tej chwili w oryginale są na razie 4 tabele, w dalekiej przyszłości dorzucę tabelę dla płyt, z podstawowymi informacjami o płycie, oraz drugą tabelę łączącą utwory i płytę"

2014-07-25 20:43:23 Post #11 nospor

 
Szczerze powiedziawszy zamotalem sie w tym calym Twoim opisie i zgubilem watek. A ze za baddzo nie mam czasu to nie moge sie skupic by to przeanalizowac.

Moge ci jedynie na szybko napisac ze to:
INSERT INTO `wykonawcy` (`WykonawcaID`, `OsobaID`, `ZespolID`) VALUES 
(1, NULL, 1), 
(2, NULL, 2), 
(3, NULL, 3), 
(4, NULL, 4), 
(5, NULL, 5), 
(6, NULL, 6), 
(7, NULL, 7); 
(7, NULL, 7), 
(7, 1, NULL), 
(9, 2, NULL), 
(10, 3, NULL);

jest bez sensu. Nie po to sie tworzy pola by byly na przemian puste lub pelne. Z czyms takim nie uda sie stworzyc sensownego i optymalnego zapytania. Pomysl nad tym jeszcze troche.

Odpowiedz

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer