ερώτημα SQL με δύσκολο πεδίο

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
tempo
Δημοσιεύσεις: 808
Εγγραφή: 25 Μάιος 2002 16:41
Επικοινωνία:

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από tempo » 21 Δεκ 2010 23:34

καλησπέρα,

έχω τον πίνακα που φαίνεται στην εικόνα.

θέλω να δημιουργήσω ένα ερώτημα που να μου επιστρέφει τις εγγραφές στις οποίες ο αριθμός που είναι μέσα στα εισαγωγικά στο τελευταίο πεδίο είναι για παράδειγμα "3" , δηλαδή θέλω να μου επιστρέφει τις 2 τελευταίες εγγραφές. Επειδή όπως το τελευταίο πεδίο είναι λίγο πολύπλοκο δεν μπορώ να το καταφέρω.

υπάρχει κάποιος τρόπος;

ευχαριστώ
Συνημμένα
mysql.png
http://www.automotonet.com πραγματικές καταναλώσεις αυτοκινήτων και μοτοσυκλετών όπως διαμορφώνονται απο τους οδηγούς
http://www.ipedia.gr online εγκυκλοπαίδεια με ερωτήσεις και απαντήσεις απο τους επισκέπτες

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από fafos » 21 Δεκ 2010 23:40

dhladh, sto pedio pou exei tis ip pos to pairmeis? katarxas ksereis giati einai etsi autes oi eggrafes?
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
tempo
Δημοσιεύσεις: 808
Εγγραφή: 25 Μάιος 2002 16:41
Επικοινωνία:

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από tempo » 21 Δεκ 2010 23:53

δεν με ενδιαφέρει να πάρω το πεδίο με τις ip.

Θέλω να φιλτράρω με βάση αυτό που λέω παραπάνω για το τελευταίο πεδίο.

δυστυχώς δεν ξέρω γιατί είναι έτσι οι εγγραφές. Είναι απο κάποιο plugin στο wordpress.
http://www.automotonet.com πραγματικές καταναλώσεις αυτοκινήτων και μοτοσυκλετών όπως διαμορφώνονται απο τους οδηγούς
http://www.ipedia.gr online εγκυκλοπαίδεια με ερωτήσεις και απαντήσεις απο τους επισκέπτες

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από fafos » 22 Δεκ 2010 00:01

auta exoun ginei serialize gia na mhn ginonti polles eggrafes gia to idio pragma... me to unserialize to kaneis array kai ekei epilegeis ti thes na ektyposeis opos douleueis kai stis arrays.. des edo gia serialize: http://php.net/manual/en/function.serialize.php kai edo unserialize: http://www.php.net/manual/en/function.unserialize.php
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
tempo
Δημοσιεύσεις: 808
Εγγραφή: 25 Μάιος 2002 16:41
Επικοινωνία:

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από tempo » 22 Δεκ 2010 00:09

δηλ. με άλλον τρόπο δεν μπορεί να γίνει;

ομολογώ ότι μπερδεύτηκα με το serialize kai unserialize αν και έχεις δίκιο, κάτι τέτοιο πρέπει να έχει γίνει.
http://www.automotonet.com πραγματικές καταναλώσεις αυτοκινήτων και μοτοσυκλετών όπως διαμορφώνονται απο τους οδηγούς
http://www.ipedia.gr online εγκυκλοπαίδεια με ερωτήσεις και απαντήσεις απο τους επισκέπτες

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από Pavel » 22 Δεκ 2010 00:13

Μόνο για το συγκεκριμένο format δεδομένων:

Εάν ο αριθμός μέσα στα εισαγωγικά είναι πάντα μονοψήφιος, χρησιμοποίησε αυτό:

Κώδικας: Επιλογή όλων

SELECT * FROM test WHERE MID(et_user_ids, INSTR(et_user_ids, '"') + 1, 1) = 3
Διαφορετικά τα πράματα περιπλέκονται λίγο:

Κώδικας: Επιλογή όλων

SELECT * FROM test WHERE MID(et_user_ids, INSTR(et_user_ids, '"')+1, LENGTH(et_user_ids) - INSTR(REVERSE(et_user_ids), '"') - INSTR(et_user_ids, '"')) = 3
Εσύ είσαι τρελός.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από nbc » 22 Δεκ 2010 00:14

Υπάρχει ο κλασικός τρόπος:

SELECT * FROM `table` where SUBSTRING(`et_user_ids`,15,1)='3'

Λειτουργεί αρκεί να ξέρεις ότι αυτό που ζητάς είναι συγκεκριμένο και πάντα στο ίδιο offset. Μπορείς να μεγαλώσεις το substring για να είναι πιο ασφαλές το query.

Υπάρχει και ο πιο ευέλικτος τρόπος:

SELECT * FROM `table` where `et_user_ids` REGEXP '^a:[0-9]+:{i:0;s:1:"3";.*'

Σου έδωσα απλά ένα παράδειγμα ευελιξίας, δεχόμενος ότι το array μπορεί να έχει οποιαδήποτε διάσταση. Προσαρμόζεις ανάλογα με το τι ακριβώς παριστά αυτό το πεδίο και το τι ακριβώς ψάχνεις.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από dva_dev » 22 Δεκ 2010 00:17

Θα μπορούσες να παίξεις και με like:

Κώδικας: Επιλογή όλων

select * from table where et_user_ids like '%:"3";%';

Άβαταρ μέλους
tempo
Δημοσιεύσεις: 808
Εγγραφή: 25 Μάιος 2002 16:41
Επικοινωνία:

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από tempo » 22 Δεκ 2010 00:34

nbc έγραψε:Υπάρχει ο κλασικός τρόπος:

SELECT * FROM `table` where SUBSTRING(`et_user_ids`,15,1)='3'

Λειτουργεί αρκεί να ξέρεις ότι αυτό που ζητάς είναι συγκεκριμένο και πάντα στο ίδιο offset. Μπορείς να μεγαλώσεις το substring για να είναι πιο ασφαλές το query.

Υπάρχει και ο πιο ευέλικτος τρόπος:

SELECT * FROM `table` where `et_user_ids` REGEXP '^a:[0-9]+:{i:0;s:1:"3";.*'

Σου έδωσα απλά ένα παράδειγμα ευελιξίας, δεχόμενος ότι το array μπορεί να έχει οποιαδήποτε διάσταση. Προσαρμόζεις ανάλογα με το τι ακριβώς παριστά αυτό το πεδίο και το τι ακριβώς ψάχνεις.
η πρώτη λύση μάλλον δεν είναι πάντα αξιόπιστη γιατί μπορεί το string να περιέχει a:100 οπότε και πρέπει το 15,1 να αλλάξει σε 17,1. Επομένως δεν μπορεί να ισχύει σε κάθε περίπτωση αν δεν κάνω λάθος.

η δεύτερη λύση είναι οκ και λειτουργεί σε μια πρόχειρη δοκιμή που έκανα όπως και η λύση του dva_dev

δεν ξέρω ποιά είναι καλύτερη ή χειρότερη. Θέλω να φιλτράρω και να βγάζω τις εγγραφές που το νούμερο που ζητάω (στο παράδειγμα μας το "3") να είναι ίδιο με το user_id ενός user του wordpress. αν γνωρίζει κανείς πως ακριβώς θα πρέπει να το ζητήσω αυτό.....;


πάντως ευχαριστώ πάρα πολύ για τον κόπο σας και την βοήθεια
http://www.automotonet.com πραγματικές καταναλώσεις αυτοκινήτων και μοτοσυκλετών όπως διαμορφώνονται απο τους οδηγούς
http://www.ipedia.gr online εγκυκλοπαίδεια με ερωτήσεις και απαντήσεις απο τους επισκέπτες

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από dva_dev » 22 Δεκ 2010 00:49

Στον κώδικα σου εκεί που χτίζεις το query ίσως μπορείς να πάρεις το userid (το 3) με the_author_meta('ID')

Άβαταρ μέλους
tempo
Δημοσιεύσεις: 808
Εγγραφή: 25 Μάιος 2002 16:41
Επικοινωνία:

ερώτημα SQL με δύσκολο πεδίο

Δημοσίευση από tempo » 22 Δεκ 2010 17:18

χρησιμοποίησα τον κώδικα σε ένα αρχείο php για να βάλω το αποτέλεσμα στην μεταβλητή $makis ως εξής

<?php $makis = mysql_query("SELECT et_rating_up FROM wp_etcomment_rating WHERE et_user_ids like '%:'3';%' "); ?>

πως μπορώ να δω ότι όντως η μεταβλητή πήρε την τιμή που προκύπτει απο το ερώτημα κανονικά;
http://www.automotonet.com πραγματικές καταναλώσεις αυτοκινήτων και μοτοσυκλετών όπως διαμορφώνονται απο τους οδηγούς
http://www.ipedia.gr online εγκυκλοπαίδεια με ερωτήσεις και απαντήσεις απο τους επισκέπτες

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες