Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Tworzenie rekordu z relacją
Forum PHP.pl > Forum > Przedszkole
sadistic_son
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ąć.
nospor
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
sadistic_son
Czyli tak zadziała?

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


nospor
W teorii tak, w praktyce nie wiem. Osobiscie wole to ostatnie id pobrac w php.
sadistic_son
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?
nospor
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 smile.gif
sadistic_son
o, elegancko.
Dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.