[MySQL][PHP] Kilka tabel + LIKE - połączenie tabel |
[MySQL][PHP] Kilka tabel + LIKE - połączenie tabel |
3.12.2019, 23:10:58
Post
#1
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
Mam problem i nie wiem jak go rozwiązać
Liczę na pomoc W 1 tabeli (zadania) mam kolumnę user_wyk w formacie np: [1][2][8][69] etc.... + oczywiscie id usera w 2 tabeli (zadania_users_pokazuj) mam kolumny id_usera, pokaz, id_usera_save Wszystko działało jeśli było user_wyk było int -> tylko 1 cyfra Potrzebuję zrobić tam kilka cyfr - kilku userów. I teraz problem jak zrobić LIKE aby to zadziałało :/ Wyciąg z zapytania
chodzi dokładnie o ten fragment: zadania.user_wyk LIKE '%['||zadania_users_pokazuj.id_usera||']%' Ktoś pomoże? __ Edit: Próbowałem już też przez IN
ale jak próbuję zadania_users_pokazuj.id_usera - > NIE DZIAŁA id_usera -> DZIAŁA ALE NIE O TO CHODZI Ten post edytował denis95x 3.12.2019, 23:39:58 |
|
|
4.12.2019, 09:41:45
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
Problem z php nie ma zadnego zwiazku. Nie widzisz tego? Przenosze
Zacznij od stworzenia poprawnej struktury tabel. Nie zadne pole z wieloma userami, tylko nowa tabela, o polach ID_ZADANIA ID_USER Z taka struktura mozna juz normalnie pracowac -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 11:05:45
Post
#3
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
Ok, ale jeśli dodam kolejne połączenie z bazą to mega mi to opóźnia.
Zapytanie i tak jest już dość długie :/
Chyba, że istnieje jakiś sposób na połączenie tego, aby działało szybciej ? ;/ Ten post edytował denis95x 5.12.2019, 09:49:43 |
|
|
4.12.2019, 11:13:52
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
1) To nie jest zadne nowe polaczenie z baza, a kolejny JOIN tabeli.
2) To ma byc dolaczone przez (LEFT )JOIN a nie we FROM masz 50 tabel... 3) Pokaz strukture tabel na ktorych operujesz, pokaz indeksy ktore zalozyles 4) Poczytaj o komendzie EXPLAIN w mysql i zacznij uzywac -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 11:25:03
Post
#5
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
|
|
|
4.12.2019, 11:44:53
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
1) W zapytaniu widze ze korzystasz z 3 tabel, pokazales dwie
2) INT(1) nie ogranicza w zaden sposob pola do 0 i 1. Jak pole bedzie przyjmowac tylko male wartosci to ma byc typu TINYINT. Patrzu manual mysql: TYPY POL 3) Jak uzyc left join? https://dev.mysql.com/doc/refman/8.0/en/join.html 4) Rowniez nie pokazales jakie zalozyles iNDEKSY a prosilem o to -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 11:49:43
Post
#7
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
INDEKSY mam tylko na id
TINYINT - będzie miało wpływ na szybkość ? Ten post edytował denis95x 4.12.2019, 12:00:30 |
|
|
4.12.2019, 11:55:37
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
Kazda mikrooptymalizacja ma wplyw na szybkosc. Czasami wieksza czasami mniejsza ale ma.
Nie masz indeksow, robisz w ciul warunkow i jeszcze zdziwiony ze dziala wolno -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 12:00:57
Post
#9
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
czy jak wyszukuję w zadania_users_pokazuj po wszystkim -> to wszystkie pola mają mieć indeksy ?
+ dodać indeksy dla pól którę są łączone w zapytaniu? dobrze rozumiem ? |
|
|
4.12.2019, 12:06:34
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
czasami indeksy maja sens czasami nie. Dlatego napisalem, bys zainteresowal sie komenda EXPLAIN, ktora ci ladnie wszystko pokaze jakie indeksy so wykorzystywane, jakie nie itp.
takze popraw zapytanie na JOINy, odpal EXPLAIN i zacznij dodawac indeksy, po kazdym indeksie wal EXPLAIN i bedziesz widzial co dziala a co nie. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 14:40:21
Post
#11
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
Kombinuję na różne sposoby
efekt -> zamulenie bazy... Coś nie tak... Ten post edytował denis95x 5.12.2019, 09:46:04 |
|
|
4.12.2019, 14:46:16
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
Przestan traktowac LICZBY jako TEKSTY - to po pierwsze. Skad wy ten nawyki bierzecie?
Po drugie: raczyles uzyc EXPLAIN jak prosilem? To moze bys pokazal wyniki explain i nam? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 15:00:00
Post
#13
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
Zapytanie:
Ten post edytował denis95x 5.12.2019, 09:45:47 |
|
|
4.12.2019, 15:04:16
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
No i dobra, i jaki np, sens ma ten warunek
rodzaje_uprawnienia.id_user=1042 ? Moze napisz wpierw slowami, co chcesz osiagnac bo jak dla mnie to sie nie trzyma kupu w tym momencie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 15:12:47
Post
#15
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
rodzaje_uprawnienia.id_user=1042
gdzie 1042 - wpisane z ręki ID zalogowanego użytkownika -> w kodzie podstawiam zmienną z PHP Co chcę osiągnąć? Więc po kolei. - mam tabelę zadań - spis treści oraz dane do wykonania zadania - kolejno sprawdzić chcę w tabeli zadania_users_pokazuj -> jakich użytkowników ma uwzględnić dla zalogowanego usera (czyli pokazać tylko zadania w których występuje użytkownik dla którego jest włączone pokaz=1) - każde zadanie ma swój rodzaj, stąd powstała tabela rodzaje_uprawnienia -> która ma definiować do jakich rodzajów ma użytkownik dostęp włączony (dostep=1) Wszystko mi działało OK jeśli miałem tylko 1 usera w zadaniu i był zapisany w tabeli zadania w momencie jak utworzyłem tabelę zadania_users w celu, aby móc przypisywać kilku userów do tego zadania - zaczęły się problemy i nie wiem jak to razem spiąć (zachowując wszystkie warunki). :/ |
|
|
4.12.2019, 15:34:49
Post
#16
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
No dobra,troche jasniej teraz
Nie mniej jednak nadal nie rozumiem czemu masz dwie tabele zadania_users_pokazuj oraz zadania_users Czym one sie roznia? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 15:47:51
Post
#17
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
zadania_users_pokazuj -> jest tabela która sprawdza tylko filtrowanie
załóżmy: jestem zalogowany i ma mi pokazać tylko zadania dla osób Kowalski, Nowak, Piątek, Sobota (id -> 1,4,5,7) a dla pozostałych ma nie pokazywać (id -> 2,3,6) więc: id 1 -> pokaz=1 id 2 -> pokaz=0 id 3 -> pokaz=0 id 4 -> pokaz=1 id 5 -> pokaz=1 id 6 -> pokaz=0 id 7 -> pokaz=1 Ta tabela tylko ma za zadanie czy ma użytkownika uwzględniać czy nie. a tabela zadania_users zapisuje numer zadania i id_usera który jest do niego przypisany czyli np. nr_zad, id_usera 99_2019, 1 99_2019, 4 99_2019, 6 101_2019, 4 teraz mniej więcej rozumiesz? Myślałem zamiast tabeli zadania_users wpisywać id userów którzy wykonują zadanie po przecinkach w tabeli głównej zadania (np. 1,4,6) -> ale to nie przejdzie Ten post edytował denis95x 5.12.2019, 09:44:40 |
|
|
4.12.2019, 16:04:12
Post
#18
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
Dalej nie kumam. Czym sie rozni przypisanie zadania od pokazywania zadania?
Czyli zadanie moze widziec zarowno osoba, ktora jest do zadania przypisana oraz osoba, ktora moze je widziec? No i ta tabela z pokazywaniem nie ma sensu tak czy siak. Jesli ona informuje kto moze widziec, to nie ma sensu dodawac tam rekordy z wartosciami 0. Tam maja byc tyko userzy, ktorzy moga widziec i juz, Po grzyba sztucznie generowac rekordy? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
4.12.2019, 16:06:48
Post
#19
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 21.02.2015 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
Przypisanie zadania od pokazania różni się.
Zadanie może widzieć każdy z użytkowników. (dodatkowo każdy z użytkowników może sam sobie zaznaczyć czy ma teraz wyświetlać zadania dla danego użytkownika czy nie) Przypisania do zadania - to userzy, którzy mogą zadanie realizować (edytować). Ci co mogą widzieć zadanie na listach nie koniecznie muszą być do niego przypisani. Ten post edytował denis95x 4.12.2019, 16:07:41 |
|
|
4.12.2019, 16:09:20
Post
#20
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6297 Dołączył: 27.12.2004 |
No i dobrze, tak czy siak, jak mowilem, wstawianie do pokaz zadanie rekordow z 0 mija sie z celem. Tylko opozniasz zapytania. Tam maja byc tylko rekordy dla osob, ktore moga widziec i juz. I juz pole POKAZ jest wtedy zbedne
Dobrze by bylo, jakbys z automatu do tabli POKAZ wrzucal osoby, ktore sa przypisane do zadania. To by dalo kopa dla zapytania bo wtedy FROM bys robil z tabeli POKAZ z warunkiem na twojego ludzika. I juz petryliard rekordow bys mial z glowy -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 03:29 |