• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kwerenda o kolumny, których nazwa zaczyna się określonym ciągiem znaków

VPS Starter Arubacloud
0 głosów
274 wizyt
pytanie zadane 1 września 2022 w SQL, bazy danych przez Marcin Lorek Początkujący (260 p.)

Cześć :)

Jak napisać kwerendę i czy jest możliwość aby wyświetliło zawartość kolumn, których nazwa tytułowa(nie mylić z nazwą rekordów), zaczyna się odpowiednim ciągiem tekstowym. Coś w stylku LIKE 'wlasciwosc_nr%' ?

id_produktu wlasciwosc_nr1 wlasciwosc_nr2

Po rezultacie tego zapytania chcę użyć funkcję w php,

mysqli_num_fields.

aby wskazać dalszym funkcjom ilość obecnych kolumn, których nazwa zaczyna się na 'wlasciwosc_nr'. 

komentarz 1 września 2022 przez PreZmyK Pasjonat (21,470 p.)
Jeżeli to relacyjna baza, to powinieneś znormalizować tabelę i zastosować klucz złożony. Coś w stylu:

(id), (wlasciwosc) - 1,1; 1,2; 1,3; 2,1; 2,2; 2,3 itd.
komentarz 1 września 2022 przez Marcin Lorek Początkujący (260 p.)

Nie rozumiem na czym ma polegać normalizacja. 

(id), (wlasciwosc) - 1,1; 1,2; 1,3; 2,1; 2,2; 2,3 itd.

Czy zapis powyżej jest regularnym ciągiem, w którym każde (id), ma właściwość od 1 do 3 ?

To jest relacyjna tabela, każda kolumna (wlasciwosc_nr%), ma przypisaną, osobną tabelę.

Jednak wcześniej próbowałem przypisać wszystkie kolumny do jednej tabeli, szukałem rozwiązań aby zastosować to w filtrach produktów, ograniczyłoby to ilość relacji, kodu w PHP oraz zautomatyzowałbym dodawanie i usuwanie rodzajów właściwości w inteface'ie admina strony internetowej(wpływałoby to na zmianę ilości kolumn w mysql) . Coś w tym stylu: 

Tabela 'produkty':

id_produktu wlasciwosc_nr_1 wlasciwosc_nr_2
1 1 3
2 2 4
3 1 4

 

Tabela 'wlasciwosc':

id_wlasciwosci nazwa_wlasciwosci rodzaj
1 XL 1
2 L 1
3 zielony 2
4 czerwony 2

Tabela 'rodzaj_wlasciwosci':

id_rodzaju nazwa_rodzaju
1 rozmiar
2 kolor

Oznaczyłem przykładowe relacje dla czytelności ?

Jest możliwość aby zapisać kwerendę  wyszukującą pierwszy produkt po jego właściwościach ?

$zapytanie = "SELECT * FROM produkty AS p, wlasciwosci AS w, rodzaj_wlasciwosci AS r WHERE p.wlasciwosc_nr1=w.id_wlasciwosci AND p.wlasciwosc_nr2=w.id_wlasciwosci AND w.rodzaj=r.id_rodzaju AND p.wlasciwosc=1";

Dużo nad tym kminiłem aby ograniczyć liczbę tabel do zastosowania filtrów, liczę jeszcze na rozwiązanie zanim będę musiał się wycofać.

1
komentarz 1 września 2022 przez PreZmyK Pasjonat (21,470 p.)
Po co to tak komplikować, nie możesz dodać kolumn id_koloru z tabeli kolory, id_rozmiaru z tabeli rozmiary, itp ? Spójność danych nie będzie w takiej strukturze utrzymana. Co jeśli wpiszesz do właściwości nr 3 rodzaj 1 ? Jak Ci baza to sprawdzi? Triggery będziesz pisał dla każdego wariantu?
komentarz 1 września 2022 przez Marcin Lorek Początkujący (260 p.)

Chcę stworzyć szablon, którym będę edytował tabelę, zapytaniem insert i alter, jedyne nazwy jakie zmienię to właściwości produktów w rekordach. Posiadam już scrypt dla wersji z tabelami dla każdego rodzaju właściwości produktów oraz wyesportowane tabele. Dlatego zapytałem czy jest to możliwe aby zapytać bazę, mi nic nie wyświetla po tej kwerendzie: 

$zapytanie = "SELECT * FROM produkty AS p, wlasciwosci AS w, rodzaj_wlasciwosci AS r WHERE p.wlasciwosc_nr1=w.id_wlasciwosci AND p.wlasciwosc_nr2=w.id_wlasciwosci AND w.rodzaj=r.id_rodzaju AND p.wlasciwosc=1";

Nie ma to spójności chociażby przy tablicy asocjacyjnej, dla kolum z tabeli.

Czy wrócić do poprzedniej wersji i nie szukać rozwiązania ? To chyba dobra droga żeby stracić dużo czasu bezcelowo ? 

2
komentarz 2 września 2022 przez PreZmyK Pasjonat (21,470 p.)

Bo te zapytanie jest błędne. Co to jest p.wlasciwosc? Nie ma takiej kolumny. Uzywasz wlasciwosc_nr2 a kolumna jest nazwana wlasciwosc_nr_2, ale pomijając to i tak nie spełniasz warunku.

Jeżeli chcesz żeby to zadziałało musisz JOINować dla każdej właściwości z nową tabelą właściwości

SELECT * FROM 
produkty AS p
INNER JOIN wlasciwosci AS w 
ON p.wlasciwosc_nr_1=w.id_wlasciwosci 
INNER JOIN wlasciwosci AS w2 
ON p.wlasciwosc_nr_2=w2.id_wlasciwosci;

 

komentarz 2 września 2022 przez Marcin Lorek Początkujący (260 p.)
edycja 2 września 2022 przez Marcin Lorek
Napisałem inną poprawną kwerendę w bazie danych ale wynik to puste wiersze, oczywiście pomijając tą błędną kwerendę u góry.
komentarz 2 września 2022 przez Marcin Lorek Początkujący (260 p.)

@PreZmyK, Działa, takiego rezultatu oczekiwałem :)

1
komentarz 2 września 2022 przez Marcin Lorek Początkujący (260 p.)
Nie wpadłbym na to że trzeba inne aliasy zastosować dla tej samej tabeli :D Dzięki

1 odpowiedź

+1 głos
odpowiedź 1 września 2022 przez VBService Ekspert (251,250 p.)
edycja 1 września 2022 przez VBService

Do "pobierania" nazw kolumn z tabeli możesz użyć:

DESCRIBE nazwa_tabeli;

lub

DESC nazwa_tabeli;

lub

SHOW COLUMNS FROM nazwa_tabeli;

ale jeżeli chcesz

 Coś w stylku LIKE 'wlasciwosc_nr%' 

to możesz zapisać tak

lub

komentarz 1 września 2022 przez Marcin Lorek Początkujący (260 p.)
edycja 1 września 2022 przez Marcin Lorek
#1054 - Nieznana kolumna 'produkty' w  where clause.

Szukam rozwiązania.
komentarz 1 września 2022 przez VBService Ekspert (251,250 p.)

#1054 - Nieznana kolumna 'produkty' w  where clause.

proszę, pokaż strukturę tabeli i kod sql-a, z którym masz ten problem.

1
komentarz 2 września 2022 przez Marcin Lorek Początkujący (260 p.)
edycja 2 września 2022 przez Marcin Lorek

Działa, pewnie literówkę miałem. Trzy kolumny w tabeli, oraz trzy rekordy po kwerendzie To miałem na myśli.

Dziękujęsmiley

Podobne pytania

0 głosów
1 odpowiedź 191 wizyt
pytanie zadane 1 stycznia 2019 w HTML i CSS przez kazik8980 Użytkownik (810 p.)
0 głosów
1 odpowiedź 905 wizyt
pytanie zadane 17 listopada 2018 w HTML i CSS przez Q_Nick Mądrala (5,010 p.)
+1 głos
2 odpowiedzi 86 wizyt
pytanie zadane 30 października 2023 w HTML i CSS przez zbiku25 Bywalec (2,940 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...