DiNoR Δημοσ. 12 Ιανουαρίου 2008 Δημοσ. 12 Ιανουαρίου 2008 Καλησπέρα, απο μια γρήγορη αναζήτηση που έκανα δε βρήκα κάτι παρόμοιο. Όπως λέει και ο τίτλος θέλω να προβάλω κάποια στοιχεία στην ιστοσελίδα μέσω σύνδεσης με τη βάση δεδομένων του παιχνιδιού Lineage2. 1. Users online - Πόσοι είναι online 2. Online users, Nickname, race και level - Η βάση δεδομένων έχει τις τιμές account_name, base_race (1 - 118), level και online (0= offline, 1=online) και 3. Πως μπορώ να συνδέσω 2 Tables Εκει που λέει Race, αντι για αριθμό να μου δείχνει το αντιστοιχο race που βρίσκεται στο table (class_list) Οι τιμες του class_list εχουν ως εξέις class_name (text) και id (1-118) Αν κάποιος μπορεί να με βοηθήσει ή να μου υποδείξει κάποιο οδηγό. Ευχαριστώ
Foutrelis Δημοσ. 13 Ιανουαρίου 2008 Δημοσ. 13 Ιανουαρίου 2008 Και τα τρία πράγματα που θέλεις να κάνεις είναι σχετικά εύκολα. Απαιτούνται βασικές γνώσεις SQL και υποθέτω ότι η scripting γλώσσα είναι η PHP. Αφιέρωσε κάποιο χρόνο ώστε να μάθεις τις δύο αυτές τεχνολογίες και να εξασκηθείς πάνω τους. Το 3ο ερώτημά σου είναι μία επέκταση του 2ου. Όπως δηλαδή παίρνεις τα στοιχεία από τον ένα πίνακα, "κολλάς" στο αποτέλεσμα το class_name από τον άλλο πίνακα (πρόσεξε ότι το base_race field στον πρώτο πίνακα αντιστοιχεί στο id του δεύτερου). Συγκεκριμένα, θα χρησιμοποιήσεις το SQL statement JOIN. Αν έχεις άλλες απορίες εδώ είμαστε. =]
DiNoR Δημοσ. 14 Ιανουαρίου 2008 Μέλος Δημοσ. 14 Ιανουαρίου 2008 Και τα τρία πράγματα που θέλεις να κάνεις είναι σχετικά εύκολα. Απαιτούνται βασικές γνώσεις SQL και υποθέτω ότι η scripting γλώσσα είναι η PHP. Αφιέρωσε κάποιο χρόνο ώστε να μάθεις τις δύο αυτές τεχνολογίες και να εξασκηθείς πάνω τους. Το 3ο ερώτημά σου είναι μία επέκταση του 2ου. Όπως δηλαδή παίρνεις τα στοιχεία από τον ένα πίνακα, "κολλάς" στο αποτέλεσμα το class_name από τον άλλο πίνακα (πρόσεξε ότι το base_race field στον πρώτο πίνακα αντιστοιχεί στο id του δεύτερου). Συγκεκριμένα, θα χρησιμοποιήσεις το SQL statement JOIN. Αν έχεις άλλες απορίες εδώ είμαστε. =] Να 'σαι καλα φίλε μου, ολα καλα με το 1ο και 2ο. Όσο αφορα το το 3ο έχω ενα μικρο προβληματάκι, κατάλαβα σχεδόν πως λειτουργει σε php. χρησιμοποιώ αυτην την εντολή >$result = mysql_query ("SELECT characters.char_name, class_list.class_name FROM characters, class_list WHERE characters.race=class_list.id"); αλλα κάτι κάνω λάθος. Μου εμφανίζει 118 φορες το ίδιο ονομα χαρακτηρα με τα στατηστικά του.. Πιθανότατα να μη το χρησιμοποιώ στη σωστή θέση. καμιά ιδέα?
Foutrelis Δημοσ. 14 Ιανουαρίου 2008 Δημοσ. 14 Ιανουαρίου 2008 Δε βλέπω κάποιο λάθος στο SQL ερώτημά σου. Αν μπορείς πόσταρε και τον κώδικα που εμφανίζει τα αποτελέσματα. Με JOIN θα ήταν κάπως έτσι, αλλά δε νομίζω να έχει καμία διαφορά στη συγκεκριμένη περίπτωση: >SELECT characters.char_name, class_list.class_name FROM characters LEFT JOIN class_list ON characters.race=class_list.id;
DiNoR Δημοσ. 14 Ιανουαρίου 2008 Μέλος Δημοσ. 14 Ιανουαρίου 2008 άλλαξα το race με το classid. > <?php $con = mysql_connect("xxxx.xxx.xxx.xxx","xxxxx","xxxxx"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("emu_db", $con); $result = mysql_query("SELECT * FROM characters"); echo "<table border='1'> <tr> <th>Character</th> <th>LvL</th> <th>Class</th> <th>PVP kills</th> <th>PK kills</th> </tr>"; $result = mysql_query("SELECT * FROM characters WHERE online='0' ORDER BY level DESC"); $result = mysql_query ("SELECT characters.char_name, class_list.class_name FROM characters, class_list WHERE characters.classid=class_list.id"); while($row = mysql_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['char_name'] . "</td>"; echo "<td>" . $row['level'] . "</td>"; echo "<td>" . $row['classid'] . "</td>"; echo "<td>" . $row['pvpkills'] . "</td>"; echo "<td>" . $row['pkkills'] . "</td>"; echo "</tr>"; } echo "</table>"; mysql_close($con); ?> αυτος είναι ο κωδικας και το αποτελεσμα στο συννημενο αρχειο.
Foutrelis Δημοσ. 14 Ιανουαρίου 2008 Δημοσ. 14 Ιανουαρίου 2008 Το αποτέλεσμα είναι σωστό μιας και επιλέγεις μόνο τα fields characters.char_name και class_list.class_name. Οπότε η κάθε γραμμή που επιστρέφεται περιέχει μόνο αυτά τα στοιχεία. Δοκίμασε να συμπεριλάβεις όλα τα στοιχεία/πεδία που σε ενδιαφέρουν: >SELECT characters.*, class_list.class_name FROM characters, class_list WHERE characters.classid=class_list.id; ή πιο συγκεκριμένα: >SELECT characters.char_name, characters.level, characters.classid, characters.pvpkills, characters.pkkills, class_list.class_name FROM characters, class_list WHERE characters.classid=class_list.id;
DiNoR Δημοσ. 14 Ιανουαρίου 2008 Μέλος Δημοσ. 14 Ιανουαρίου 2008 εκανα αυτο που λές, εχεις δίκιο, τώρα εμφανίζει όλα τα στοιχεία αλλα δε μου κάνει την αλλαγή κοιτα τα characters.classid class_list.id είναι και τα 2 numeric. Συνεπώς όπως το βλέπω, παίρνει τα νούμερα απο άλλη στήλη. πρέπει κάπως να συνδέσω το class_list.id με το class_list.class_name
DiNoR Δημοσ. 14 Ιανουαρίου 2008 Μέλος Δημοσ. 14 Ιανουαρίου 2008 Τελικα τα κατάφερα. Ειλικρινά δε ξέρω πως συνδεέι τις τιμές αλλά τα δείχνει σωστά. > <?php $con = mysql_connect("χχχ.χχχ.χχχ.χχχ","χχχχχ","χχχχχ"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("emu_db", $con); $result = mysql_query("SELECT * FROM characters, class_list"); echo "<table border='1'> <tr> <th>Character</th> <th>LvL</th> <th>Class</th> <th>PVP kills</th> <th>PK kills</th> </tr>"; $result = mysql_query ("SELECT characters.*, class_list.* FROM characters, class_list WHERE characters.classid=class_list.id AND online='1' AND accesslevel='0' ORDER BY level DESC"); while($row = mysql_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['char_name'] . "</td>"; echo "<td>" . $row['level'] . "</td>"; echo "<td>" . $row['class_name'] . "</td>"; echo "<td>" . $row['pvpkills'] . "</td>"; echo "<td>" . $row['pkkills'] . "</td>"; echo "</tr>"; } echo "</table>"; mysql_close($con); ?> επιδή δε θέλω να φαίνονται οι GM προσθεσα αυτη τη τιμή AND accesslevel='0' και το αποτέλεσμα
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.