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

SQL - ORDER BY wartość zmiennej

0 głosów
609 wizyt
pytanie zadane 2 stycznia 2020 w SQL, bazy danych przez Kolberg Obywatel (1,580 p.)
Napisałem kod, który daje "punkty" wynikom wyszukiwania sqla, które mają więcej wspólnych elementów z tymi przysłanymi postem. Ma to na celu poukładanie wyników wyszukania według tego jak często występują wspólne elementy tego co ktoś szuka i danych z wiersza sql.

Punkty zapisane są w talblicy punkty[$id] (php).

Czy istnieje możliwość poukładania (np. ORDER BY) według wartości zmiennych z tablicy punkty?

$id oczywiście odpowiada identyfikatorowi z tabeli sql

1 odpowiedź

0 głosów
odpowiedź 2 stycznia 2020 przez mbabane Szeryf (79,260 p.)

W order by wstawia się nazwę kolumny (z tabeli w bazie danych) według której chcesz posortować: 

SELECT * FROM table_name ORDER BY column_name ASC|DESC

 https://www.geeksforgeeks.org/sql-order-by/

Czyli w select w order by wstawiasz nazwę kolumny do której zapisuje się wartość z tablicy punkty[$id].

Zakładam jednak, że takie rzeczy to raczej wiesz, więc jeśli to nie jest odpowiedź na pytanie to, może sformułuj je jakoś inaczej lub podaj przykład jakie dane masz w tabeli, jakie ma kolumny i co ma być wynikiem.

komentarz 2 stycznia 2020 przez Kolberg Obywatel (1,580 p.)
Może podam przykład, bo nie o to mi chodziło:

Tabela o nazwie: gry_wideo

*ID | tematy

1 | zamek, wojna, śmierć

2 | zamek, wojna, rycerze

Ktoś w formularzu z podanych pól wybiera np. tematy: zamek, wojna, śmierć aby znaleźć gry w tej tematyce

Następnie w pętli przy każdej osobnej grze sprawdzam ile tematów, które ktoś wybrał zawiera ta gra i zapisuje je w tablicy, np: Gra o id 1 zawiera 3 wspólne tematy(zamek, wojna, śmierć), natomiast gra o id 2 zawiera 2 wspólne tematy(zamek, wojna)

Chcę, aby wyżej wyświetliły się gry, które mają więcej tematów wspólnych z tymi podanymi przez użytkownika. Problem w tym, że aby zrobić to w sql'u muszę jakoś wstawić sortowanie nie według kolumny, a tablicy. Szukam również ewentualnego innego rozwiązania na wypisanie tych rekordów w określonym porządku.
komentarz 3 stycznia 2020 przez mbabane Szeryf (79,260 p.)

Trzeba będzie chyba zrobić grupowanie z having:

select count(id) 'ilosc'
from gry_tematy
group by tematy having tematy like '%zamek%' or tematy like '%wojna%'

 

Mam jeszcze inny pomysł na to ale to później Ci wyjaśnię (chodzi o to, że można zrobić z pola tematy, osobną tabelę).

 

komentarz 4 stycznia 2020 przez Kolberg Obywatel (1,580 p.)

Grupowanie z having chyba tu nie zadziała frown. Dodanie "or tematy..." nie przynosi skutku. Jeżeli chodzi o pomysł z tabelą to też o tym myślałem, ale przy dużym ruchu na stronie było by to co najmniej nieprzyjazne dla serwera rozwiązanie. Chyba że da się zrobić coś jak "wirtualna tabela", albo chwilowa, bez konieczności ingerowania w rzeczywistą bazę danych.

komentarz 4 stycznia 2020 przez mbabane Szeryf (79,260 p.)
Druga tabela będzie na pewno wydajniejsza niż przeszukiwanie pola tekstowego.

Podobne pytania

0 głosów
1 odpowiedź 556 wizyt
0 głosów
1 odpowiedź 552 wizyt
pytanie zadane 26 kwietnia 2020 w SQL, bazy danych przez Farba Początkujący (440 p.)
0 głosów
1 odpowiedź 456 wizyt
pytanie zadane 19 sierpnia 2017 w SQL, bazy danych przez Melchior Obywatel (1,300 p.)

93,720 zapytań

142,648 odpowiedzi

323,266 komentarzy

63,270 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...