• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
373 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 (256,320 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 (256,320 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ź 244 wizyt
pytanie zadane 1 stycznia 2019 w HTML i CSS przez kazik8980 Użytkownik (810 p.)
0 głosów
1 odpowiedź 1,161 wizyt
pytanie zadane 17 listopada 2018 w HTML i CSS przez Q_Nick Mądrala (5,010 p.)
+1 głos
2 odpowiedzi 315 wizyt
pytanie zadane 30 października 2023 w HTML i CSS przez zbiku25 Gaduła (3,000 p.)

93,186 zapytań

142,199 odpowiedzi

322,009 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2005p. - Łukasz Siedlecki
  7. 1964p. - CC PL
  8. 1835p. - Adrian Wieprzkowicz
  9. 1785p. - Michal Drewniak
  10. 1744p. - rafalszastok
  11. 1734p. - Anonim 3619784
  12. 1684p. - Mikbac
  13. 1520p. - Marcin Putra
  14. 1480p. - ssynowiec
  15. 1474p. - Dawid128
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...