thename2002 Skrevet 21. januar 2012 Del Skrevet 21. januar 2012 (endret) Heller på og setter i sammen et lite system for minecraft serveren min hvordan kan jeg søke i flere "tables" på samme tid, og lage en enkel og fin liste som ligner på denne: Tekst : Tabel1 info Tekst : Tabel2 info Tekst : Tabel3 info osv... her er de som skal hente tabelene: //Select account balance $sqlCommand = "(SELECT ID, Player, Account FROM dConomy WHERE MATCH (Player,Account) AGAINST ('$searchquery')"; //Select bank balance $sqlCommand = "(SELECT ID, Player, Bank FROM dConomy WHERE MATCH (Player,Bank) AGAINST ('$searchquery')"; //Select Friends $sqlCommand = "(SELECT player, friend FROM friends WHERE MATCH (player,friend) AGAINST ('$searchquery')"; //Select PlayedFor - VERY COMPLEX HAVE TO GET THE DATA FIRST; THEN CONVERT IT FROM MILLISECONDS TO HOURS/DAYS $sqlCommand = "(SELECT id, Player, Played FROM TimePlayed WHERE MATCH (Player,Played) AGAINST ('$searchquery')"; //Quest Completed $sqlCommand = "(SELECT player_name, quest_id, date_completed FROM quests_completed WHERE MATCH (player_name,quest_id) AGAINST ('$searchquery')"; //Quest Active $sqlCommand = "(SELECT player_name, quest_id FROM quests_active WHERE MATCH (player_name,quest_id) AGAINST ('$searchquery')"; // Caste Name //NOTE: name = playername rank=castename $sqlCommand = "(SELECT id, name, rank FROM casteplayers WHERE MATCH (name,rank) AGAINST ('$searchquery')"; // Salary/Claimable paycheck note: HasCheck will return: true/false $sqlCommand = "(SELECT id, Player, Employer, HasCheck FROM MySalary WHERE MATCH (Player,HasCheck) AGAINST ('$searchquery')"; Hvordan kan jeg hente alle disse og sette dem sammen? får kun til og sette sammen 1, av en aller annen grunn Endret 21. januar 2012 av thename2002 Lenke til kommentar
BlueEAGLE Skrevet 21. januar 2012 Del Skrevet 21. januar 2012 Hvis du henter ut like mange felt fra hver tabell så kan du bruke UNION. ...men siden dette ikke er relaterte data så tror jeg du vil ha en spørring for hver datadel med mindre du har en treg kobling mellom web- og databasetjener. Lenke til kommentar
thename2002 Skrevet 21. januar 2012 Forfatter Del Skrevet 21. januar 2012 Hvis du henter ut like mange felt fra hver tabell så kan du bruke UNION. ...men siden dette ikke er relaterte data så tror jeg du vil ha en spørring for hver datadel med mindre du har en treg kobling mellom web- og databasetjener. må nok det, kan vær at den er litt treg, webserver i texas, og mysql server i paris sliter nå meg og søke opp alle på likt, for så og liste dem i "mysql_fetch_array" står litt fast der Lenke til kommentar
BlueEAGLE Skrevet 21. januar 2012 Del Skrevet 21. januar 2012 (endret) Det er bare å slå opp på UNION for din databasetjener. Legg dog merke til at du må hente like mange felt fra hver tabell. Det vil si at det kan være at du må be om blanke felt i noen spørringer for å få antallet likt. SELECT felt1, felt2, felt3 FROM Table1 WHERE Condition = Criteria UNION SELECT felt4, felt5, '' FROM Table2 WHERE Condition = Criteria Her velges tre felt fra en tabell og to felt fra en annen. Hvis du får mer enn en rad fra hver tabell så trenger du i tillegg en måte å skille resultatene fra de forskjellige tabellene fra hverandre. EDIT: Bare så det er sagt så er dette IKKE en veldig god løsning og det vil være bedre i det lange løpet å fikse infrastrukturen slik at nett- og databasetjener var i samme land. Helst i samme bygg. Endret 21. januar 2012 av BlueEAGLE Lenke til kommentar
thename2002 Skrevet 21. januar 2012 Forfatter Del Skrevet 21. januar 2012 Det er bare å slå opp på UNION for din databasetjener. Legg dog merke til at du må hente like mange felt fra hver tabell. Det vil si at det kan være at du må be om blanke felt i noen spørringer for å få antallet likt. SELECT felt1, felt2, felt3 FROM Table1 WHERE Condition = Criteria UNION SELECT felt4, felt5, '' FROM Table2 WHERE Condition = Criteria Her velges tre felt fra en tabell og to felt fra en annen. Hvis du får mer enn en rad fra hver tabell så trenger du i tillegg en måte å skille resultatene fra de forskjellige tabellene fra hverandre. EDIT: Bare så det er sagt så er dette IKKE en veldig god løsning og det vil være bedre i det lange løpet å fikse infrastrukturen slik at nett- og databasetjener var i samme land. Helst i samme bygg. funker UNION på flere en 2 tables? SELECT felt1, felt2, felt3 FROM Table1 WHERE Condition = Criteria UNION SELECT felt4, felt5, '' FROM Table2 WHERE Condition = Criteria UNION SELECT felt4, felt5, '' FROM Table2 WHERE Condition = Criteria og har du en lett forklaring på mysql_fetch_array, fatter ikke helt hvordan den fungerer, jeg mener, hvordan jeg kan plukke ut foreksempel Account fra ett table, Bank fra ett anna table, og player fra det tredje, jeg brukte denne: while($data = mysql_fetch_assoc($sql)) { print '<tr align="center"> <td>' . $data["player"] . '</td> </tr>'; } print "</table></center>"; for ett anna script som ligner denne, vett ikke hvordan jeg fikk det til, men det funka hvert fall - takk for hjelpa så langt Lenke til kommentar
BlueEAGLE Skrevet 22. januar 2012 Del Skrevet 22. januar 2012 Vennligst les manualen og spør om det du faktisk lurer på. Et problem du vil få ved bruk av assosiative matriser er at feltnavnene fra de forskjellige tabellene ikke nødvendigvis vil være det samme så da vil de assosiative verdiene bli forskjellig. Det du nok vil gjøre er å lage en funksjon som tar $searchquery som et parameter og returnerer en ferdigformatert assosiativ matrise som inneholder alle feltene med fornuftige navn. Forskjellen på mysql_fetch_assoc, mysql_fetch_row og myslq_fetch_array er at den første gir en matrise med navn som nøkkel, den andre gir en matrise med tall som nøkkel og den tredje gir en matrise med begge nøkkeltypene. Lenke til kommentar
Crowly Skrevet 22. januar 2012 Del Skrevet 22. januar 2012 (endret) Er bare å bruke alias på like felt navn i de forskjellige selectene, f.eks //Select account balance $sqlCommand = "(SELECT ID dc_id, Player dc_player, Account FROM dConomy WHERE MATCH (Player,Account) AGAINST ('$searchquery')"; //Select bank balance $sqlCommand = "(SELECT ID dc2_id, Player dc2_player, Bank FROM dConomy WHERE MATCH (Player,Bank) AGAINST ('$searchquery')"; //Select Friends $sqlCommand = "(SELECT player f_player, friend FROM friends WHERE MATCH (player,friend) AGAINST ('$searchquery')"; Hvis alle disse selectene blir slått sammen i en array så vil ID og Player ha unike navn. $array['dc_id'], $array['dc_player'] osv. Ser også at alle Selectene er satt i parentes, men avsluttende parentes mangler. Er det noen grunn til at dette er gjort? Regner med at dette er MySql, og der er ikke det nødvendig. Bør vel være mulig å koble flere av disse tabellene med joins, men kommer litt an på hvilke verdier de forskjellige feltene inneholder. Hadde vært enklere å si noe om, om vi visste noe om tabell strukturen og så noen eksempel rader fra hver tabell. Endret 22. januar 2012 av Crowly Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå