Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Zapytanie złożone do bazy
Laxus
post 8.08.2017, 22:51:06
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.03.2017

Ostrzeżenie: (0%)
-----


Witam.

Mam problem z ułożeniem zapytania do bazy.

Ułożyłem coś takiego:

  1. SELECT k.id, k.nazwa, k.salaID FROM kontrahenci AS k, sale AS s WHERE k.salaID = s.id


Zapytanie działa prawidłowo. Teraz potrzebuję dodać do niego numer sali (s.numer), tak aby w rezultacie otrzymać nie id sali (k.salaID), tylko właśnie numer sali (s.numer) z rekordu, do którego się to id (s.id) odnosi.

Mam nadzieję, że to co napisałem jest do zrozumienia. Naprawdę ciężko mi się zadaje pytania odnośnie SQLa.

Ten post edytował Laxus 8.08.2017, 23:09:14
Go to the top of the page
+Quote Post
olszam
post 9.08.2017, 07:09:24
Post #2





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

Ostrzeżenie: (0%)
-----


Dopisz tylko do selecta jeszcze s.numer. a na początku k.salaID nie jest ci potrzebna jeśli nie chcesz jej wyświetlać ważne by w WHERE była.

Jak coś do testów zapytań z pełną bazą danych https://www.w3schools.com/sql/trysql.asp?fi...ysql_select_all oczywiście inne nazwy tabel tam są smile.gif
Go to the top of the page
+Quote Post
bostaf
post 9.08.2017, 08:23:05
Post #3





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Hej Laxus,

Proponowałbym, żebyś zaczął używać join (i ładne graficzne wyjaśnienie).

  1. SELECT
  2. k.id, k.nazwa, s.numer
  3. FROM kontrahenci AS k
  4. JOIN sale AS s ON k.salaID = s.id
Go to the top of the page
+Quote Post
trueblue
post 9.08.2017, 08:27:06
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


WHERE zamiast JOIN nie jest błędem. Optymalizator bazy danych i tak sprowadzi WHERE do JOIN, aby nie wykonywać iloczynu kartezjańskiego.


--------------------
Go to the top of the page
+Quote Post
bostaf
post 9.08.2017, 08:41:09
Post #5





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(trueblue @ 9.08.2017, 09:27:06 ) *
WHERE zamiast JOIN nie jest błędem. Optymalizator bazy danych i tak sprowadzi WHERE do JOIN, aby nie wykonywać iloczynu kartezjańskiego.

Jasne że nie jest. Ale jest bardziej semantyczne i czytelne jak się zacznie robić powiązania między większą ilością tabel.
Go to the top of the page
+Quote Post
Laxus
post 9.08.2017, 18:37:45
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.03.2017

Ostrzeżenie: (0%)
-----


Już rozumiem. Dzięki wszystkim za pomoc.

Tylko mam jeszcze prośbę. Jak już poruszyłem ten temat to czy mógłby mi ktoś napisać przykładowe zapytanie typu INSERT, bo jak znam siebie to znowu będę kombinował, a najszybciej chwytam na przykładach.

Przykładowo jak napisać zapytanie, które doda kontrahenta o nazwie Biedronka z numerem sali 200, tak żeby uzupełnić obie tabele wraz z id w jednym zapytaniu?
Go to the top of the page
+Quote Post
mmmmmmm
post 9.08.2017, 19:33:41
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Cytat(Laxus @ 9.08.2017, 19:37:45 ) *
Przykładowo jak napisać zapytanie, które doda kontrahenta o nazwie Biedronka z numerem sali 200, tak żeby uzupełnić obie tabele wraz z id w jednym zapytaniu?

W MySQL bez triggerów się nie da.
Go to the top of the page
+Quote Post
viking
post 9.08.2017, 21:12:37
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


W jednym nie ale możesz wykorzystać zapytanie:

  1. BEGIN;
  2. INSERT INTO sale(numer) VALUES (200);
  3. INSERT INTO kontrahenci (salaID, nazwa) VALUES(LAST_INSERT_ID(), 'Biedronka');
  4. commit;


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 06:00