AndzX8-842 Posted July 7, 2006 Report Posted July 7, 2006 (edited) Te ir tabulas. -- -- Table structure for table `users` -- CREATE TABLE users ( id int(10) unsigned NOT NULL auto_increment, username varchar(40) NOT NULL default '', password varchar(40) NOT NULL default '', email varchar(255) NOT NULL default '', signature TEXT, status tinyint(1) unsigned NOT NULL default '0', added datetime NOT NULL default '0000-00-00 00:00:00', last_login datetime NOT NULL default '0000-00-00 00:00:00', last_access datetime NOT NULL default '0000-00-00 00:00:00', ip varchar(15) NOT NULL default '', class tinyint(1) unsigned NOT NULL default '1', avatar varchar(255) NOT NULL default '', warned tinyint(1) NOT NULL default '0', PRIMARY KEY (id) ) TYPE=MyISAM; CREATE TABLE fleet { id int(10) unsigned NOT NULL auto_increment, fleet_name varchar(255) NOT NULL default '', fleet_commander_id int(10) NOT NULL default '', PRIMARY KEY (id) } TYPE=MyISAM; -- -- Table structure for table `divisions` -- CREATE TABLE divisions { id int(10) unsigned NOT NULL auto_increment, fleet_id int(10) unsigned NOT NULL default '', division_name varchar(255) NOT NULL default '', division_commander_id int(10) unsigned NOT NULL default '', PRIMARY KEY (id) } TYPE=MyISAM; -- -- Table structure for table `dmembers` -- CREATE TABLE dmembers { id int(10) unsigned NOT NULL auto_increment, division_id int(10) unsigned NOT NULL default '', user_id int(10) unsigned NOT NULL default '', PRIMARY KEY (id) } TYPE=MyISAM; Nepieciešams ar vienu query izvilkt informāciju šādā secībā. Izvilkt infromāciju no fleet tabulas, tad pēc fleet_commander_id atrast tādu pašu id users tabulā un izvilkt tās tabulas rindas informāciju, tad no divisions tabulas atrast rindu\rindas, kam ir tāds pats fleet_id kā id fleet tabulā un izvilt tās\to rindas\rindu informāciju, pēc divisions tabulā atrodamā id atras dmembers tabulā rindu vai rindas, kurās division_id sakrīt ar division tabulas id un izvilk to rindu\rindas informāciju, tad pēc dmembers tabulas izvilktās informācijas izvilkt no users tabulas visas rindas, kurās users tabulā id sakrīt ar dmembers tabulas division_member_id. Dikti sarežģīti man tas viss izklausās, jo nav bijis vajadzīgs iepriekš taisīt tik sarežģītu query. Ļoti noderētu palīdzība. Šo to pamēģināju ar 2 tabulām un apmēram sanāca, bet ar 4 vienā query man tas JOIN\ON\AS ir par sālītu. :( Kāds tas query kods izskatītos? Edited July 7, 2006 by AndzX8-842
v3rb0 Posted July 7, 2006 Report Posted July 7, 2006 (edited) kverija rezultāts ir tabula - nevis koks, neiedziļinoties izklausās ka gribi dabūt arā kokveida struktūru. un kāpēc atkal ar 1nu kveriju - taisi ar cik māki Edited July 7, 2006 by v3rb0
AndzX8-842 Posted July 7, 2006 Author Report Posted July 7, 2006 (edited) Tāpēc, ka ar vairākiem sanāktu tik daudz query, cik users no users tabulas kaut kur, piemēram pie divisions tabulas pieder, ja 100, tad 100 + kaut kas query. Tas ir nedaudz nenormāli un ja vairāki cilvēki apskatās to pašu lapu, tad ir klusais vājprāts. Edited July 7, 2006 by AndzX8-842
Delfins Posted July 7, 2006 Report Posted July 7, 2006 takš parastais joins... PS: join var arī atstāt ar oldskuul `from t1, t2` + `where t1.f = t2.f` (~ tas pats vien būs)
Aleksandrs Posted July 7, 2006 Report Posted July 7, 2006 Rakstot pēc teksta, sanāca kaut kas tāds: SELECT f.*,u.*,d.*,m.* FROM fleet f LEFT JOIN users u ON f.fleet_commander_id=u.id LEFT JOIN division d ON f.id=d.fleet_id LEFT JOIN dmembers m ON d.id=m.division_id LEFT JOIN users s ON s.id=m.division_member_id
hmnc Posted July 8, 2006 Report Posted July 8, 2006 Andz - ja tev vajag linkot tabulas pēc noteiktiem parametriem (users.id -> fleet.user_id) tad bez lefjoiniem neiztiksi. Aleksandra piemērs izskatās visprastākais, bet manuprāt vispareizākais :) iesaku palasīt par tabulu joinošanu.
Recommended Posts