wolfakisevag Δημοσ. 27 Μαρτίου 2009 Δημοσ. 27 Μαρτίου 2009 παιδιά για σας φτιάχνο μια σελίδα οπου έχει καποια προιόντα και ο επισκέπτης πατώντας την εικόνα του προιόντος ψηφήζει το προιον.οι πινακες που αναφέρονται είναι οι: create table perigrafh ( code int unsigned not null auto_increment primary key, typos char (100), eikona char(100))DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_general_ci CHARSET=utf8 COLLATE=utf8_general_ci; create table pshfos (kodikos int unsigned not null auto_increment, code3 int unsigned not null references perigrafh(code), vote int, pshfos_create_time DATETIME, primary key(kodikos,code3) )DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_general_ci CHARSET=utf8 COLLATE=utf8_general_ci; όταν πατάω στην εικόνα του προιόντος κάνει insert τον ψηφο: $res= mysqli_query($mysqli,"INSERT INTO pshfos (code3,vote, pshfos_create_time) VALUES ('".$_GET["code"]."','".$i."',now())") οπου $i=0; or die(mysqli_error($mysqli)); για να δώ τα αποτελέσματα των ψηφων κάνω: $verify_res2 = mysqli_query($mysqli,"select perigrafh.eikona,sum(vote) from perigrafh,pshfos where perigrafh.code=pshfos.code3 group by perigrafh.code ") το πρόβλημα που αντιμετοπίζω είναι ότι θέλω να κάνω ένα σύνδεσμο που να βρίσκει την εικόνα με τους περισσότερους ψηφους και εχω δοκιμάσει αυτο : $verify_res2 = mysqli_query($mysqli,"select perigrafh.eikona,mαχ(vote) from perigrafh,pshfos where perigrafh.code=pshfos.code3 group by perigrafh.code ") αλλα δεν είναι σωστό μήπος έχει κανείς ιδέα πως να το γράψω εχω δοκιμάσει και κάτι άλλα που έβγαζαν σφάλματα ενω το πάνω δεν έβγαζε σφάλματα αλλά δεν είναι σωστο αφού σε όλα τα vote=1.αν κάποιοσ μου βρεί λύση θα με βοηθούσε πάρα πολύ γιατι τώρα 2 μερες έχο κολύσει σε αυτο.ευχαριστό πολύ εκ τον προτέρων!
Maniakos Δημοσ. 27 Μαρτίου 2009 Δημοσ. 27 Μαρτίου 2009 2 ώρες μόνο και τα παράτησες; Ένας απλός τρόπος είναι ο εξής: > SELECT perigrafh.eikona FROM `perigrafh` INNER JOIN pshfos ON perigrafh.code = pshfos.code3 WHERE pshfos.vote = ( SELECT MAX( `vote` ) FROM `pshfos` ) Βέβαια, αυτό άμα έχεις δύο εικόνες με τα ίδια votes θα τις φέρει και τις δύο. Άμα θες να το περιορίσεις πρέπει να προσθέσεις ένα LIMIT 1. Επίσης άμα είναι να χρησιμοποιήσεις το παραπάνω βάλε ένα INDEX στο vote. Επίσης μια παρατήρηση. Καλύτερο είναι να γράφεις στα αγγλικά τις μεταβλητές και τα SQL Fields γιατί δεν υπάρχει λόγος να αναλώνεσαι στο αν το έχεις γράψει "pshfos" ή "psifos" και να πρέπει να κοιτάς ξανά και ξανά την βάση για να θυμηθείς. Επίσης ο κώδικας γίνεται πιο δυσανάγνωστος με greekglish μεταβλητές.
wolfakisevag Δημοσ. 28 Μαρτίου 2009 Μέλος Δημοσ. 28 Μαρτίου 2009 φιλε μου καταρχας 2 μερες το παλευο και οχι 2 ωρες και ειχα δοκιμάσει και αυτό αλλά αφού συνέχεια κανει insert 1 vote εμφανίζει όλες τις εικόνες όλων των προιοντων από όσες φορές κάνει insert τον ψήφο αφού κάνει insert (code,vode,datetime)=(get_code,1,now()).δηλαδή αν καταλαβες περιπου τη θέλω να βρο είναι κάτι σαν αυτό: max(sum (vote) ) δηλαδη με ελληνικά το μεγαλύτερο σύνολο ψηφων ψάχνο αλλά οταν το βάζο έτσι βγάζει σφάλμα.ουσιαστικά και αυτό που μου έγραψες κάνει το ίδιο με αυτό που έγραψα και εγώ.καμιά άλλη ιδέα μήπως;
Maniakos Δημοσ. 28 Μαρτίου 2009 Δημοσ. 28 Μαρτίου 2009 Αυτό που σου έδειξα βρίσκει το προϊόν που έχει τις περισσότερες ψήφους. Σόρρυ, αυτό κατάλαβα στην αρχή ότι θες και διάβασα και λάθος το "2 μέρες". Ήμουν σίγουρος ότι διάβασα "2 ώρες". Το λάθος σου βρίσκεται στο "INSERT". Κάθε φορά που κάνει click κάποιος την φωτογραφία θα πρέπει να προσθέτεις μια ψήφο στο προϊόν όχι να κάνει INSERT οπότε εσύ πρέπει να κάνεις UPDATE και να προσθέσεις vote = vote + 1 αλλιώς θα μένουνε για πάντα όλα με '1'. Θα πρέπει όμως την πρώτη φορά που φτιάχνεις ένα προϊόν να προσθέτεις και ένα entry στο pshfos table με vote = 0 οπότε μετά να κάνεις το UPDATE αλλιώς την πρώτη φορά που θα μπει ψήφος για το προϊόν θα χρειάζεται να τσεκάρεις άμα είναι πρώτη φορά που μπαίνει ψήφος και μετά να αποφασίζεις άμα θα κάνει INSERT ή UPDATE. Ο πρώτος τρόπος είναι καλύτερος γιατί γλιτώνεις 1 query αφού ξέρεις ήδη ότι υπάρχει το entry άρα, UPDATE. Τέλος, αυτό εδώ που έχεις γράψει για να φέρνει τα αποτελέσματα, είναι λάθος: > select perigrafh.eikona,mαχ(vote) from perigrafh,pshfos where perigrafh.code=pshfos.code3 group by perigrafh.code Το σωστό είναι: > SELECT perigrafh.eikona, max( vote ) FROM perigrafh, pshfos WHERE perigrafh.code = pshfos.code3 Επίσης θα σου πρότεινα να χρησιμοποιήσεις το query που σου έγραψα εγώ για τα αποτελέσματα γιατί με το δικό σου κάνει full table scan η βάση, πράγμα το οποίο δεν θέλουμε.
wolfakisevag Δημοσ. 28 Μαρτίου 2009 Μέλος Δημοσ. 28 Μαρτίου 2009 φίλε μου αρχικά το έκανα με update αλλά επειδή θέλω να εμφανίζεται και η ημερομηνια κάθε φορά που προστήθεται ψήφος το έκανα έτσι γιατι πως αλιώς θα πρόσθετα καινουρια ημερομηνία; υπ οψην οτι την ημερομηνία την έβαλα για να βρίσκει τους ψήφους και ανα συγκεκριμένη ημερομηνια!καμια ιδέα ;αν κάνω update τον ψήφο τί θα κάνω με την ημερομηνια για να κσέρω πιος ψηφος αντιστοιχουσε σε πια ημερομηνιά;
Maniakos Δημοσ. 28 Μαρτίου 2009 Δημοσ. 28 Μαρτίου 2009 ΟΚ, τώρα κατάλαβα ότι θες να κρατάς ΟΛΕΣ τις ψήφους. Άκυρα λοιπόν όλα. Κάθε φορά που κάνει click κάποιος μια εικόνα κάνεις το INSERT σου έτσι όπως το έχεις κάνει και για να πάρεις το σωστό αποτέλεσμα κάνεις το εξής: > SELECT eikona, SUM(vote) as totalVotes FROM pshfos INNER JOIN perigrafh ON perigrafh.code = pshfos.code3 GROUP BY code ORDER BY totalVotes DESC LIMIT 0,1 To παραπάνω query δεν είναι ότι και καλύτερο (για την ακρίβεια το θεωρώ αισχρό) και θα αρχίσει να προκαλεί προβλήματα άμα μεγαλώσει πάρα πολύ η βάση. Επίσης πρόσθεσε ένα INDEX στο pshfos.code3. To πιο σωστό πάντως είναι να προσθέσεις ένα INT field στο perigrafh με όνομα totalVotes και να το αυξάνεις κάθε φορά που προσθέτεις ένα vote και το query θα γίνει πολύ πιο απλό αφού μετά θα κάνεις query ένα table. Άμα κάνεις την αλλαγή που σου λέω μετά πολύ απλά θα κάνεις: > SELECT eikona, MAX(totalVotes) FROM `perigrafh` και τελείωσες. Sorry που άργησα τόσο πολύ να καταλάβω τι θες...είμαι σε κατάσταση πανικού σήμερα με δικά μου θέματα. Ελπίζω τελικά να βοήθησα.
wolfakisevag Δημοσ. 28 Μαρτίου 2009 Μέλος Δημοσ. 28 Μαρτίου 2009 φιλε μου ευχαριστώ πολυ και μόνο με το λιμιτ που μου είπες να βάλω δουλεύει γιατι αφού πανε οι ψηφοι με φθηνουσα σειρά το πρωτο που εμφανίζει είναι αυτό με τους μεγαλύτερους ψήφους!
Maniakos Δημοσ. 28 Μαρτίου 2009 Δημοσ. 28 Μαρτίου 2009 Κοίταξα πάλι το θέμα σου σήμερα που ήμουν πιο ξεκούραστος και το πιο αποδοτικό query είναι το εξής: > SELECT eikona, COUNT(*) AS totalCount FROM perigrafh INNER JOIN pshfos ON perigrafh.code = pshfos.code3 GROUP BY pshfos.code3 ORDER BY totalCount DESC LIMIT 1 Να ξανατονίσω ότι πρέπει να βάλεις ένα INDEX στο pshfos.code3 Θα σε συμβούλευα να την χρησιμοποιήσεις αν δεν πρόκειται να κάνεις την αλλαγή που πρότεινα για να είναι ακόμα πιο γρήγορο.
Jimmy_BlinD Δημοσ. 1 Απριλίου 2009 Δημοσ. 1 Απριλίου 2009 Θέλω να βγάζει ενα swf (width="950" height="628") σε ενα index.html που να βγαίνει τέρμα πάνω και αριστερά (χωρις κενά) σε fullscreen όπως βγαίνει και τώρα με τον κωδικα που έχω βάλει. ειναι εύκολο κάποιος να μου φτιάξει τον κώδικα ωστε να γίνεται αυτό? </head> <body bgcolor="#000000"> <center> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,79,0" id="http://netii.net/index.swf" width="950" height="628" > <param name="movie" value="http://netii.net/index.swf"> <param name="bgcolor" value="#000000"> <param name="quality" value="high" /> <param name="scale" value="noscale" /> <param name="allowscriptaccess" value="samedomain"> <embed type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" name="The_Index2" width="950" height="628" src="http://netii.net/index.swf" bgcolor="#000000" quality="high" swliveconnect="true" allowscriptaccess="samedomain" > <noembed> </noembed> </embed> </object> </center> </body> </html>
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.