Zapytanie MySQL

Witam serdecznie,
Mam 2 tabele:

CREATE TABLE `cms_jezyki_txt` (

  `gt_id` bigint(20) UNSIGNED NOT NULL,

  `opis` mediumtext COLLATE utf8_unicode_ci,

  `id_jezyka` bigint(20) NOT NULL DEFAULT '0',

  `id_rekordu` bigint(20) NOT NULL DEFAULT '0',

  `poziom` tinyint(4) NOT NULL DEFAULT '0',

  `typ_tabeli` smallint(6) NOT NULL DEFAULT '0'

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



ALTER TABLE `cms_jezyki_txt`

  MODIFY `gt_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

  
  
opis - zawiera tekst który wyświetlamy
id_jezyka - jest to numer id języka
oraz 2 tabela:

CREATE TABLE `sklep_producent` (

  `gt_id` bigint(20) UNSIGNED NOT NULL,

  `parametr` bigint(20) NOT NULL,

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



ALTER TABLE `sklep_producent`

  MODIFY `gt_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

  
  
  
W tabeli sklep_producent mam parametry producentów, a w tabeli cms_jezyki_txt znajdują się różne wersje
językowe nazw producentów.

przykładowo w cms_jezyki_txt mamy id_jezyka:
1 - polski
2 - angielski
3 - hiszpański

INSERT INTO `sklep_producent` (`gt_id`, `parametr`) VALUES (1, 1);



INSERT INTO `cms_jezyki_txt` (`gt_id`, `opis`, `id_jezyka`, `id_rekordu`, `poziom`, `typ_tabeli`) VALUES

(16, 'apple', 3, 6, 0, 1),

(17, 'manzana', 4, 6, 0, 1),

(18, 'jabłko', 1, 6, 0, 1);

 

Potrzebuję 2 zapytania mysql:

  1. wyświetlanie nazw we wszystkich dostępnych językach (czyli SELECT)
  2. wyszukiwanie po nazwach i wyświetlenie wyników  (czyli wpisuję zarówno apple jak i jabłko - to powinno mi wyświetlić 1 rekord)

 

Wie ktoś może jak to zrobić?
Bardzo proszę o pomoc,

Witam

Brakuje mi w tych tablicach pola z indeksem towarowym po którym można by wyszukiwać wszystkich tłumaczeń. No chyba, że jako indeks towarowy traktujesz id_rekordu (6 dla wszystkich podanych tłumaczeń).  Jeśli określisz co reprezentuje ten indeks towarowy to zapytania postaram Ci się napisać.

 

Pozdrawiam

Pierwsze pytanie: czy nie lepiej uzyc jakiegos rozsadnego frameworka i nie bawic sie w niskoposiomowy sql? to nie ma sensu.

 

A co do pytania, to jak kolega wyzej zauwazyl, nie jest sprecyzowana relacja miedzy tabelami. Zakldajac, ze jest to id_rekordu (co jako jedyna jako tako pasuje, ale schemat nazewnictwa to tutaj duzy problem) to (psuedokod)

select opis from cms_jezyki_txt where id_rekordu = id_rekordu_z_tablicy_towarow

Wyszukanie nazwy towaru w dowolnym jezyku nie zawsze (potencjalnie) zwroci tylko jeden rekord. Lepiej tego nie robic w taki sposob. I mozna to probowac robic na rozne sposoby, ale bez podanej relacji do tabeli produktow nie ma co zgadywac, a ja w podanych tabelach nei widze zadnej zaleznosci. Przemysl konkretnie cale podejscie. I poczytaj o i18n. 

Dla czterech rodzai zapytań do bazy danych chcesz używać frameworka? Serio? A w dalszą część zdania nie wierze co czytam, po prostu oczy mi na wierzch wyszły.

Potem się dziwić że proste aplikacje tak zamulają skoro tyle fameworków do niego upychają, o wadze nie wspominam.

Jeśli miałby już czegoś używać to czegoś w rodzaju kontrolera do połączeń z bazą danych, ale tego to się używa jak jest potrzeba w rozbudowanych aplikacjach dla zapewnienia większego bezpieczeństwa. Przy czym taki “kontroler” i tak pozwala wysyłać własnoręcznie napisane zapytania SQL, bo są często wydajniejsze niż ich generowanie przez taki kontroler. Zresztą zapytanie zajmuje mniej kodu niż ustawienie wszystkiego w takim “kontrolerze”.

Nie nazwałbym tego frameworkiem, jak coś to już API, bo kontroler też w sumie średnio pasuje, raczej opisuje zakres działań.

 

Wracając do tematu,

nie masz kluczy głównych w tabelach, kluczy obcych przez co brak relacji pomiędzy tabelami. Taka baza danych będzie działała bardzo wolno, szybko dane będą niespójne, ewentualnie koszt utrzymania spójności danych będzie bardzo wysoki i będzie spoczywał na aplikacji która operuje na bazie danych.

Tak, framework lub gotowe rozwiazanie. Widac dokladnie, ze kolega nie radzi sobie z DB, tym bardziej z konstrukcja zapytan, wiec uzycie gotowego rozwiazania jest preferowane, a uzycie frameworka pozwoli mu na unikniecie wszystkich pozostalych bledow, ktore moze popelnic (chociazby sanitizing strings przy podawaniu produktu do wyszukania).

Proste aplikacje zamulaja, poniewaz pisza je osoby ktore nie potrafia tego robic. Sensowne uzycie framework tylko i wylacznie moze pomoc, a jakiekolwiek problemy z wydajnoscia beda pomijalne w porownaniu z zyskiem. I jeden framework calkowicie wystarczy (chociazby malutki medoo na php), no chyba, ze dodamy kolejne warstwy do stworzenia np rest (oData), wtedy byc moze mozna wykorzystac cos wiecej. Plus framework na front end - bo pisanie samodzielnie calego HTML to proszenie sie o klopoty. 

 

@angh

 

Na forum piszemy w języku polskim, używamy “ś, ć, ź, ż, ą, ę, etc.”, oraz znaków interpunkcyjnych, proszę użyć przycisku EDYTUJ , który znajdziesz w prawym dolnym rogu posta i dokonać zalecanych poprawek w treści postów. Dziękuję za uwagę.

dziękuję bardzo, już sobie poradziłem :slight_smile:

 

Coz, jezeli mam wybierac miedzy pomaganiem na forum a OS z ustawieniami jezykowymi, jakie sa mi potrzebne, pozostaje mi powiedziec ‘czesc’ :wink:

do zobaczenia na stackoverflow.