Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Tworzenie rekordu z relacją
sadistic_son
post
Post #1





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Cześc, tytuł być może nie do końca oddaje o co chcę zapytać, ale nie miałem lepszego pomysłu jak to opisać

A więc tworzę rekordy w bazie. Na przykład chcę utworzyć nową kategorię filmu (komedia) oraz nowy film (Sexmisja - komedia).
Mogę to zrobić wieloma zapytaniami:
  1. INSERT INTO kategoria VALUES (NULL, 'komedia');
  2. /*nastepnie musze poznać ID komedii aby dodać ją do konkretnego filmu: */
  3. SELECT id FROM kategoria WHERE 'kategoria' = 'komedia'
  4. /* Teraz rzucam rekord Sexmisji z id komedii. */
  5. INSERT INTO film VALUES (NULL, 'Sexmisja', $id_kategorii )

Na pewno da się to zrobić jednym zapytaniem, lub przynajmniej mniejszą ilością niż trzy. Jak?

Dzięki z góry.

EDIT:
Zaraz po napisaniu posta wpadłem na takie coś:
  1. INSERT INTO film VALUES (NULL, 'Sexmisja', INSERT INTO kategoria VALUES (NULL, 'komedia'))

To pewnie nie zadziała, ale nie mogę sprawdzić bo siedzę w pociągu i piszę z komórki. Ale pokazuje co chcę osiągnąć.

Ten post edytował sadistic_son 19.12.2022, 10:55:08
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak, maja to byc 3 zapytania, tylko nie tak jak napisales na poczatku tylko wystarczy uzyc last_insert_id by pobrac ostatnio utworzeone id, zamist szukac po nazwie kategorii.


zazwyczaj biblioteka ktorej uzywasz do zapytan pozwala na latwe odpalenie lastInsertId by pisania zapytania jako takiego. Nie wiem czego uzywasz do bazy
Go to the top of the page
+Quote Post
sadistic_son
post
Post #3





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Czyli tak zadziała?

  1. INSERT INTO kategoria VALUES (NULL, 'komedia');
  2. INSERT INTO film VALUES (NULL, 'Sexmisja', SELECT LAST_INSERT_ID() )




Ten post edytował sadistic_son 19.12.2022, 11:09:44
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W teorii tak, w praktyce nie wiem. Osobiscie wole to ostatnie id pobrac w php.
Go to the top of the page
+Quote Post
sadistic_son
post
Post #5





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Topornie przez komórkę udało się sprawdzić w phpmyadmin na szybko. Zadziała ale jeśli SELECT LAST_INSERT_ID() weźmie się w nawiasy. A dlaczego tak, po co te nawiasy?

  1. INSERT INTO kategoria VALUES (NULL, 'komedia');
  2. INSERT INTO film VALUES (NULL, 'Sexmisja', (SELECT LAST_INSERT_ID()) )


Cytat(nospor @ 19.12.2022, 11:08:53 ) *
Osobiscie wole to ostatnie id pobrac w php.


Dlaczego? Bardziej czytelny kod? Bardziej optymalny? Przyzwyczajenie? Best practices?


Ten post edytował sadistic_son 19.12.2022, 11:10:30
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Dlaczego? Bardziej czytelny kod? Bardziej optymalny? Przyzwyczajenie? Best practices?

Poniewaz w php w klasie film mam metode add

public function add (string $title, int $categoryId) {
....
}

I jak widzisz funkcja wymaga podania id kategorii (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
sadistic_son
post
Post #7





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


o, elegancko.
Dzięki (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 16:06