Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Kilka zapytań:>
Freequ
post 4.08.2010, 09:42:48
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 10.03.2008

Ostrzeżenie: (0%)
-----


Witam.
Potrzebuje skryptu, który z tabeli "reg" pobierze z kolumny "nick" podaną nazwę, po czym skopiuje z kolumny "ID" pobierze cyfre, przejdzie do bazy konta w tabeli "konta" znajdzie to podane ID i tyle.
Trochę zagmatwane, ale na pewno wykonalne.
Pozdrawiam! smile.gif
Go to the top of the page
+Quote Post
zelu
post 4.08.2010, 09:44:23
Post #2





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


No i co zrobi jak znajdzie? Bo ta część jest dla mnie niejasna
Go to the top of the page
+Quote Post
Freequ
post 4.08.2010, 10:41:26
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 10.03.2008

Ostrzeżenie: (0%)
-----


Znajdzie liczbe z kolumny pionowej "ID" w kolumnie poziomej, w której jest podany nick.
Może Paint to wyjaśni tongue.gif
http://img130.imageshack.us/img130/7201/beztytuudkq.png
Go to the top of the page
+Quote Post
zelu
post 4.08.2010, 10:44:05
Post #4





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


  1. SELECT id, nick FROM reg WHERE nick = 'jakis nick'


Ewnetualnie
  1. SELECT id, nick FROM reg WHERE id = X

jeżeli chcesz pobrać po id

Jednak nadal nie rozumiem co ma się dziać po tym jak już pobierzesz dane z pierwszej tabeli?

Ten post edytował zelu 4.08.2010, 10:45:29
Go to the top of the page
+Quote Post
Freequ
post 4.08.2010, 11:02:56
Post #5





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 10.03.2008

Ostrzeżenie: (0%)
-----


No tak, nie napisałem. Pośpiech..

Gdy wybierze już z pierwszej tabeli, ma przejść do drugiej. Znaleźć tam to wcześniej wybrane ID i w kolumnie STATUS zmienić na NO.
Prosiłbym jednak o gotowca, całego, lub same zapytania, wszystko sobie ułożęsmile.gif

Pozdrawiam.
Go to the top of the page
+Quote Post
zelu
post 4.08.2010, 11:08:18
Post #6





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


  1. UPDATE konto SET STATUS = 'no' WHERE id = (SELECT id FROM reg WHERE nick = 'jakis nick' )
Go to the top of the page
+Quote Post
thek
post 4.08.2010, 12:46:58
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




O ja pierniczę... Po co taka jazda? Nie lepiej zrobić JOIN pomiędzy obiema tabelami i jedną z kolumn updateować?
  1. UPDATE tabela1 AS t1 LEFT JOIN tabela2 AS t2 ON t1.kolumna = t2.kolumna SET t1.pole_jakieś = 'wartosc' WHERE t2.pole_inne = 'cos tam' LIMIT 1
Pokombinuj jednak, choć z optymalizacją tego będzie już na pewno ciężko.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
zelu
post 4.08.2010, 13:00:48
Post #8





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


No niby można, ale co jest złego w prostym podzapytaniu? smile.gif Poza tym jest chyba bardziej czytelne niż mieszanie z JOINami smile.gif
Go to the top of the page
+Quote Post
thek
post 4.08.2010, 13:14:09
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To porównaj czasy wykonania. Jedną z pierwszych zasad optymalizacji jest pozbywanie się podzapytań, ponieważ w większości przypadków spowalniają one całość zapytania (nie zawsze, ale bardzo często).


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
phpion
post 4.08.2010, 13:16:00
Post #10





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(thek @ 4.08.2010, 14:14:09 ) *
Jedną z pierwszych zasad optymalizacji jest pozbywanie się podzapytań

W Twojej wypowiedzi zabrakło na końcu: "skorelowanych". Faktycznie jednak należałoby wykonać pomiary empiryczne realizacji obu zapytań i wybrać to wydajniejsze.
Go to the top of the page
+Quote Post
Freequ
post 4.08.2010, 13:16:39
Post #11





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 10.03.2008

Ostrzeżenie: (0%)
-----


Zelu, jest problem.
Tabela reg jest w bazie user, a tabela konta w bazie konta.
Wiem, jestem nieznośny, ale potrzebuję to pilnie, mam nadzieję, że wytrzymasz ze mną tongue.gif

Ten post edytował Freequ 4.08.2010, 13:17:15
Go to the top of the page
+Quote Post
zelu
post 4.08.2010, 13:22:43
Post #12





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


No to odpadają jakiekolwiek podazapytania i JOINy (a przynajmniej ja nie znam sposobu) winksmiley.jpg

Musisz to zrobić z wykorzystaniem PHP.

Połącz się z bazą user, pobierz ID (używając zapytania z podzaypytania).
Następnie połącz się z 2 bazą i zrób UPDATE pola o określonym ID.

A w ogóle co Ty za twór tworzysz, że potrzebujesz do tego 2 baz?


Pozdro
Go to the top of the page
+Quote Post
thek
post 4.08.2010, 13:30:56
Post #13





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Słuszna uwaga phpion - podzapytania skorelowane smile.gif
Jakie odpadają? Jeśli obie bazy są na tym samym serwerze i istnieje użytkownik, który ma prawa do obydwóch baz, to może tworzyć zapytania tego typu w postaci baza1.tabela1 LEFT JOIN baza2.tabela2 smile.gif To tylko kwestia uprawnień usera winksmiley.jpg Sam tak na localu robię gdy muszę przeparsować dane między bazami i wyniki pchnąć do jednej z nich.

Jeśli nie masz wspólnego to pozostaje jedynie po stronie PHP pisać skrypt, który wykona to. Pobierasz jednym zapytaniem z bazy pierwszej interesujący Cię id i jeśli on istnieje to robisz zapytanie do drugiej bazy by szukało rekordów z tym id. I uważaj na mysql_connect przy łączeniu z 2 bazami. Wiele osób tutaj ma problemy, bo nie wie jak to zrobić. Co jakiś czas potem jest problem i temat o tym na forum.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Freequ
post 4.08.2010, 13:33:05
Post #14





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 10.03.2008

Ostrzeżenie: (0%)
-----


thek, a możesz podać jakis przykład z tymi JOINami? snitch.gif Póki co piszę coś z tym pobieraniem rekordu, a potem szukanie dalej.
Użytkownik ma wszystkie prawa, jestem administratorem.
Go to the top of the page
+Quote Post
zelu
post 4.08.2010, 13:33:38
Post #15





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat
zapytania tego typu w postaci baza1.tabela1 LEFT JOIN baza2.tabela2


No fakt, zapomniałem smile.gif
Go to the top of the page
+Quote Post
thek
post 4.08.2010, 13:57:16
Post #16





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To weź mój przykład z pierwszego posta w temacie, przerób do swoich potrzeb, a tam gdzie masz tabela1 daj baza1.tabela1, zaś gdzie tabela2 daj baza2.tabela2. Tutaj przydają się aliasy, bo przepisywanie tego w kółko byłoby już nieco upierdliwe winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 16:49