philos Δημοσ. 18 Φεβρουαρίου 2021 Δημοσ. 18 Φεβρουαρίου 2021 (επεξεργασμένο) Έστω ότι έχουμε το column message σε έναν πίνακα tablename. Κάποιες εγγραφές του πίνακα έχουν κείμενο (ευνόητο ποια είναι τα μεταβλητά μέρη) της μορφής: [ame="https://www.youtube.com/watch?v=GEPvsn6JA_c"]lalala lalalal alala[/ame] Θα ήθελα να τα κάνω όλα replace, με το εξής αποτέλεσμα: [MEDIA=youtube]GEPvsn6JA_c[/MEDIA] Όπως καταλαβαίνετε δεν μας απασχολεί η πληροφορία lalala, ας χαθεί. Μας ενδιαφέρει να πάρουμε το youtube id του video και να το βάλουμε μέσα στο MEDIA bbcode. Λογικά θέλει regular expression, που ακόμα να τις μάθω Κάθε βοήθεια ευπρόσδεκτη, θα κάνω copy τον πίνακα (backup) για πολλαπλές δοκιμές. Η σκέψη είναι να γίνει με ένα UPDATE query κι όχι με PHP και loopες. χμμμ Επεξ/σία 18 Φεβρουαρίου 2021 από philos
Επισκέπτης Δημοσ. 18 Φεβρουαρίου 2021 Δημοσ. 18 Φεβρουαρίου 2021 (επεξεργασμένο) PHP Loop (που δεν θέλεις)Μετά $str1 = explode("?v=",$value); $str2 = explode("\"",$str1[1]); $final = '[MEDIA=youtube]'.$str2[0].'[/MEDIA]; Σα νασαι μπακάλης. Επεξ/σία 18 Φεβρουαρίου 2021 από Επισκέπτης
philos Δημοσ. 19 Φεβρουαρίου 2021 Μέλος Δημοσ. 19 Φεβρουαρίου 2021 Αναζητώ κάτι σε MySQL λύση καθώς μιλάμε για 1000 δες γραμμές και από την άλλη, το πεδίο message δεν έχει μόνο το κείμενο που παρέθεσα αλλά κι άλλο
tolhc1234 Δημοσ. 19 Φεβρουαρίου 2021 Δημοσ. 19 Φεβρουαρίου 2021 Έχεις σε όλα "https://www.youtube.com/watch?v=...." ή έχεις και άλλα site? 1
philos Δημοσ. 19 Φεβρουαρίου 2021 Μέλος Δημοσ. 19 Φεβρουαρίου 2021 4 λεπτά πριν, tolhc1234 είπε Έχεις σε όλα "https://www.youtube.com/watch?v=...." ή έχεις και άλλα site? Σε όλα youtube
tolhc1234 Δημοσ. 19 Φεβρουαρίου 2021 Δημοσ. 19 Φεβρουαρίου 2021 (επεξεργασμένο) Πολύ μπακάλικα δοκιμασε το σε select να δεις αν σου φαίρνει σωστά τα πράγματα πρώτα '[MEDIA=youtube]'+SUBSTRING(message , LOCATE('v=',message ) + 2, LOCATE('"]',message ) - LOCATE('v=',message ) - 2) + '[/MEDIA]' Επειδή μάλλον δεν παίζει σε mysql το syntax που έγραψα παραπάνω, τσέκαρε εδώ http://sqlfiddle.com/#!9/c1526c/1 Επεξ/σία 19 Φεβρουαρίου 2021 από tolhc1234 1
philos Δημοσ. 20 Φεβρουαρίου 2021 Μέλος Δημοσ. 20 Φεβρουαρίου 2021 (επεξεργασμένο) 8 ώρες πριν, tolhc1234 είπε Πολύ μπακάλικα δοκιμασε το σε select να δεις αν σου φαίρνει σωστά τα πράγματα πρώτα '[MEDIA=youtube]'+SUBSTRING(message , LOCATE('v=',message ) + 2, LOCATE('"]',message ) - LOCATE('v=',message ) - 2) + '[/MEDIA]' Επειδή μάλλον δεν παίζει σε mysql το syntax που έγραψα παραπάνω, τσέκαρε εδώ http://sqlfiddle.com/#!9/c1526c/1 Ευχαριστώ πολύ για την ενασχόληση!! Θα ήθελα να ρωτήσω: 1. Άρα η UPDATE πως μπορεί να συνταχθεί; Θέλουμε να κάνουμε replace (δλδ mysql UPDATE) το πεδίο message ώστε να εναρμονιστούν με τα νέα δεδομένα. Το message μπορεί να έχει και μπόλικο κείμενο μέσα να υπάρχει [ame= μία ή και περισσότερες φορές με μπροστά ή πίσω του άλλο άσχετο κείμενο. 2. Είναι σίγουρα σωστή η σκέψη σου; Ρωτάω γιατί βλέπω μόνο το 'v=' και μπορεί να υπάρχουν youtube links στο πεδίο message, που να μην είναι σε ame bbcode tag. Η ιδέα είναι να αλλάξουμε μόνο τα [ame= ΥΓ: Όπως καταλαβαίνετε πρόκειται για τον πίνακα των posts ενός forum Επεξ/σία 20 Φεβρουαρίου 2021 από philos
macabre_sunsets Δημοσ. 21 Φεβρουαρίου 2021 Δημοσ. 21 Φεβρουαρίου 2021 Εάν η βάση δεδομένων είναι MySQL 8.0+ μπορείς να χρησιμοποιήσεις τη function "REGEXP_REPLACE": UPDATE `tablename` SET `message` = REGEXP_REPLACE(`message`, 'ame="https:\/\/www\.youtube\.com\/watch(.*?)v=(.*?)"(.*?)\/ame', 'MEDIA=youtube]$2[/MEDIA'); Μπορείς να δεις ένα παράδειγμα εδώ. Spoiler Το παραθέτω και σαν εικόνα για να υπάρχει: 1 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα