![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 23.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam taki problem, którego nie potrafiłem wyszukać w googlach ze względu na jego specyficzną naturę. Otóż piszę grę, w której uzupełnia się kolekcję. Przedmioty do kolekcji dostajemy losowo i jest ich 100 różnych. Chciałbym, aby gracze mogli się wymieniać przedmiotami, które mają podwójne. Tabela KOLEKCJA jest prosta: kol_id INT user_id INT przedmiot_id INT na_wymianie TINYINT (przyjmuje 0 lub 1) Kiedy gracz ma więcej niż 1 ten sam przedmiot, może jeden z nich wystawić na wymianę, wtedy na_wymianie=1 I na tej wymianie jest, dla uproszczenia, tylko 1 wystawiony przedmiot. Ja teraz jako gracz wchodzę na wymianę i widzę ten przedmiot na liście. I tu pojawia się select, którego nie potrafię napisać, czyli: POKAŻ MI LISTĘ MOICH PRZEDMIOTÓW, KTÓRYCH MAM WIĘCEJ NIŻ 1 i GRACZ Z WYMIANY ICH NIE MA. Wtedy decyduję który przedmiot chcę wymienić za ten którego ja pożądam i tyle... Pomóżcie napisać tego selecta, albo chociaż nakierujcie w jaki sposób to napisać. pozdrawiam i z góry dzięki! Adam PS. Acha! Tak dla jasności. Gra jest online i jest całkowicie darmowa. Jeśli ktoś jest zainteresowany to podeślę adres, bo nie wiem czy tu na forum można się reklamować. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 10 Dołączył: 24.04.2015 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 23.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki!
Myślałem, że będę musiał polegać na jakimś skomplikowanym selekcie w mysql, ale podsunąłeś/ęłaś mi świetny pomysł z tymi tablicami. Jeszcze nie zacząłem pisać ale pomysł jest taki: 1. tworzę tablicę z wszystkimi stoma elementami (1, 2, 3, 4, 5, 6.........99, 100) 2. z tej tablicy wyrzucam przedmioty, które on ma = zostają tam tylko przedmioty, których nie ma 3. robię sobie tablicę z moimi podwójnymi elementami 4. porównuję czy w mojej tablicy są jakieś przedmioty zawierające się w jego tablicy. 5. wymiana (IMG:style_emoticons/default/smile.gif) dzięki raz jeszcze! |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
SQLFiddle wysiadło, więc masz tu dwa zapytania, ktore to robia..
Musisz sobie sprawdzic, ktore dla twoich warunkow bedzie wydajniejsze...
Ten post edytował mmmmmmm 17.05.2016, 08:34:30 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 23.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
@mmmmmmmm
To jest dokładnie to czego szukałem! Działa wyśmienicie! Dzięki po stokroć! Jeszcze raz ja. Bardzo dziwna sprawa wyniknęła. Z tymi itemami do kolekcji mam taką tabelę
Do tej tabelki wrzucają się rekordy jeśli jakiś user znajdzie przedmiot. Chciałem ułożyć zapytanie, które wybiera mi wszystkich userów bez powtórzeń, którzy mają jakiekolwiek duplikaty i nie są zalogowanym userem. Wymyśliłem takie zapytanie:
i działało bardzo dobrze. Ale... postanowiłem założyć indexy na pola ki_userid i ki_przedmiotid i zapytanie to całkiem przestało działać - zawsze zwracało pusty wynik. Ktoś wytłumaczy? Założyłem też indexy w innych tabelach i teraz zaczynam się martwić. Z góry dziękuję! -------------- Nie dawało mi to spokoju i wymęczyłem nowe zapytanie:
Działa tak samo ale jest prostsze i indexy znów działają! Mógłby ktoś jednak wyjaśnić dlaczego do tego poprzedniego zapytania z indexami nie działało? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem, co ten SELECT we WHERE miałby robić. Nie znam żadnej sytuacji (a pracuje z bazami parę ładnych lat), w której trzeba by było czegoś takiego użyć.
To jest skopane całkowicie. DISTINCT + GROUP = źle GROUP BY ki_przedmiotid + HAVING COUNT(ki_przedmiotid) = źle |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.10.2025 - 17:57 |