1 (edited by addinol 2011-09-09 14:29:13)

Topic: Dvigubas mysql'as

Sveiki, taigi norėčiau paklausti kaip padaryti jog per php prisijungti į 2 skirtingas mysql lenteles.

t.y. pas mane viena lentelė rank kita admins.

dabar turiu prisijungęs į rank ir ten gaunu visą info, bet reiktų gauti iš admins vieną eilutę , tik nežinau kaip...

Ir pas mane yra kaip ir list'as toks: http://78.56.130.238/rank/ bet iš 2 skirtingų lentelių turi sueiti ta prasme to pačio žmogaus (pagal IP iš pirmos lentelės informacija ir iš antros to pačio IP informacija)

Pirma lentelė pvz: ip  name  auth ...
Antra lentelė pvz: ip  admin  smth ...

Tiesiog noriu padaryti jog prie vardo rodytų žvaigždutę jei kitoje lentelėje prie jo IP admin = 2

Dalis kodo iš tinklapio php:

http://pastebin.com/NCSEaJVV

Re: Dvigubas mysql'as

http://dev.mysql.com/doc/refman/5.1/en/join.html

Re: Dvigubas mysql'as

Nelabai supratau vistiek kaip jis ten naudojamas :)

Galbūt galėtumete lengviau paaiškinti bei numesti konkretų pavizdį.

Re: Dvigubas mysql'as

addinol wrote:

Nelabai supratau vistiek kaip jis ten naudojamas :)

Galbūt galėtumete lengviau paaiškinti bei numesti konkretų pavizdį.

http://www.mysql.lt/forumas/viewtopic.php?id=127

Re: Dvigubas mysql'as

o lengvesnio būdo nėra?

Re: Dvigubas mysql'as

addinol wrote:

o lengvesnio būdo nėra?

Tai čia labai lengvas ir yra.

Re: Dvigubas mysql'as

Mhm, bet vistiek nesuprantu. nes pas mane ciklas listui padarytas. tai kažkaip nesusigaudau kaip čia reiktų jį pritaikyti.

Re: Dvigubas mysql'as

O tai nenoretum prie to pacio is esmes pasimokinti kaip dirbti su db? Ar tu ten tik ale kazka "fixini", ir nenori per daug gylintis?

P.S. gal kas ir parasys tau gatava sprendima, bet cia zmones labai megsta priversti pajudinti savo smegenis, kad bent kazkokios naudos butu (-;

Re: Dvigubas mysql'as

Nu matai aš ne šito galo meistras. Bet dabar sau darau sistemą žaidime, ir norisi atspindėti webe ją :)

Dėl gatavo padarymo nenoriu, bet noriu suprasti kiek nors kad galėčiau pats pasidaryti.

Pasižiūrėjau ten tuos paveiksliukus ką tas JOIN daro, bet esmės nepagavau, kur man tai naudoti.

Re: Dvigubas mysql'as

Tai gal tu vis del to normaliai pasiskaityk dokumentacija (http://dev.mysql.com/doc/refman/5.1/en/join.html), pasiziurek pavyzdzius. Nes ten viskas labai paprastai ir aiskiai aprasyta.

11 (edited by addinol 2011-09-09 18:37:28)

Re: Dvigubas mysql'as

$query="SELECT rank.*, admins.privileges FROM rank INNER JOIN admins ON rank.ip = admins.ip ORDER BY rank.skill DESC";

O kodėl dabar neberodo nieko, jeigu nėra ir pirmoje ir antroje lentelėje tokio pat IP. Rodo tik tada jeigu yra abejose lentelėse tokie pat IP.

Ir kaip dėl tokių pačių pavadinimų. pvz pas mane lentelėje yra tokie pat rank.name ir admins.name Tai kurį čia iš jų ims jei aš naudosiu:

$name = $num['name'];

Re: Dvigubas mysql'as

Todel, kad patingejai paskaityti iki galo kaip veikia pvz left join ir inner join. Skaityk atydziai, neskubek gyventi (-;

Re: Dvigubas mysql'as

O taip, bet vistiek nesuprantu. kas bus jei pas mane tokie pat yra, name. Ir pirmame ir antrame, nes dabar kai padariau kad imtų pagrindinę info iš left, t.y. pirmos lentelės. tai NAME neberodo ;D

14 (edited by Neodan 2011-09-09 18:46:27)

Re: Dvigubas mysql'as

nori pasakyti sitaip neveikia teisintai?

SELECT rank.ip, rank.name, admins.privileges FROM rank LEFT JOIN admins ON admins.ip = rank.ip ORDER BY rank.skill DESC

15 (edited by addinol 2011-09-09 18:48:40)

Re: Dvigubas mysql'as

O šitaip veikia, buvau padaręs:

SELECT * FROM rank LEFT JOIN admins ON rank.ip = admins.ip ORDER BY skill DESC

O būtina tą rank.ip rank.name nes pas mane ten apie 10 dalykų kurių man reikia, neina tiesiog rank.* ? Nes kiek bandžiau tai veikia lyg ir :)

16 (edited by Neodan 2011-09-09 18:50:30)

Re: Dvigubas mysql'as

addinol wrote:

O šitaip veikia, buvau padaręs:

SELECT * FROM rank LEFT JOIN admins ON rank.ip = admins.ip ORDER BY skill DESC

O būtina tą rank.ip rank.name nes pas mane ten apie 10 dalykų kurių man reikia, neina tiesiog rank.* ?

Sitaip negali paimineti visu lauku is visu lenteliu, teisingai butu taip:

SELECT rank.*, admins.* FROM rank LEFT JOIN admins ON rank.ip = admins.ip ORDER BY skill DESC

Paprastai tariant, turi pasakyti is kokios lenteles reikia imti infa. Nors kaip taisykle visu lauku nereikia, taigi kulturinga yra nurodyti konkrecius laukus, kuriu tau reikia (taip sutaupai resursu neimdamas ir nesiusdamas bereikalingos infos).

Re: Dvigubas mysql'as

Ok dėkui jums už pagalbą atrodo viską susitvarkiau :) !