| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

11-07-2009, 21:28
|
|
basst
Registrierter Benutzer
|
|
Registriert seit: Jul 2009
Beiträge: 3
|
|
Kurze Wörter aud Mysql Table "Tags_Keywords" entfernen
Hallo,
ich habe folgende Herausvorderung und wäre dankbar für Angegungen.
Ich habe eine große Mysql DB Tabelle in der Artikel verschlagwortet sind.
D.H. es existiert eine Spalte "Tags_Keywords".
Ich benötige ein Script das ich in regelmäßigen Abständen benutzen möchte um alle Wörter unter 5 Zeichen zu entfernen.
Also so eine Art Wartungsscript zur Keyword-Bereinigung.
Danke.
|

12-07-2009, 01:06
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Wenn es in einem Wald ein großes Loch gibt und immer wieder Tiere hinein stürzen, dann kaufst du einen Kran, um die Bergung zu erleichtern? Warum schüttest du das Loch nicht zu oder ziehst einen Zaun ringsum?
Sorge dafür, dass die unerwünschten Daten gar nicht erst in die DB geschrieben werden!
Klingt auch nicht sehr normalisiert ...
|

12-07-2009, 10:01
|
Abraxax
  THE REAL HAXE (Administrator)
|
|
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.621
|
|
OffTopic: Ich würde den Kran kaufen ... 
|

13-07-2009, 10:33
|
|
mkb_webprint
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 53
|
|
Auch wenn onemorenerd schon eine sehr schöne Antwort gefunden hat, auch wenn sie das Problem der schon vorhandenen Datensätze nicht löst. Hier noch meine Gedanken wie du das Problem lösen kannst.
1. Verhindere, wie onemorenerd schon gesagt hat, das die unerwünschten Daten in die DB kommen.
2. SQL-Query zum löschen von den vorhandenen Datensätzen:
PHP-Code:
<?php mysql_query("DELETE * FROM deine_tabelle WHERE LENGTH(deine_tabelle.Tags_Keywords) < 5"); ?>
3. Kein Gewähr auf 100%-ige Funktionsfähigkeit. Meine gelesen zu haben das die Funktionen LENGTH() Probleme mit UTF-8 codierten Strings haben kann... Teste es am besten erstmal indem du DELETE mit SELECT tauschst..
Viel Erfolg.
Grüße
Björn
|

13-07-2009, 13:08
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Ich befürchte, dass er in der Spalte Tags_Keywords nicht einzelne Wörter sondern Wortkolonnen stehen hat. Das meinte ich mit "nicht normalisiert".
Egal, er spricht anscheinend nicht mehr mit uns. Er wollte wohl ein fertiges Script und keine guten Ratschläge.
|

27-07-2009, 16:52
|
|
basst
Registrierter Benutzer
|
|
Registriert seit: Jul 2009
Beiträge: 3
|
|
Danke euch für die Hilfe und entschuldigt die späte Reaktion,
ich habe eine Tabelle "texte" mit einer Spalte "Tags" mit folgendem Inhalt:
"Langwort kurz langwort1 kurz und Längereswort"
Nach der SQL Anweisung soll dann nur noch:
"Langwort langwort1 Längereswort"
erhalten bleiben.
Ich fürchte diese funktion kann das nicht leisten
"DELETE * FROM deine_tabelle WHERE LENGTH(deine_tabelle.Tags_Keywords) < 5"
oder?
|

27-07-2009, 17:24
|
|
mkb_webprint
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 53
|
|
Zitat:
Zitat von basst
Ich fürchte diese funktion kann das nicht leisten
"DELETE * FROM deine_tabelle WHERE LENGTH(deine_tabelle.Tags_Keywords) < 5"
|
Da befürchtest du richtig. Eine Möglichkeit die mir noch einfällt ist, ein Script zu schreiben das deine Tag-Felder ausliest, das Ergebnis dann mit explode(" ", $deine_spalte) in einen array zerlegt und dann die elemente einzeln durchlaufen und schauen ob die weniger als 5 Zeichen haben.
Auf die Schnelle ungefähr so:
PHP-Code:
<?php $res = mysql_query("SELECT Tags FROM deine_tabelle ORDER BY was_weiss_ich ASC"); while($row = mysql_fetch_array($res)) { $tmp = explode(" ", $row['Tags']); foreach($tmp as $key=>$tag) { if(strlen($tag) < 5) { unset($tmp[$key]); } } $neue_tags = implode(" ", $tmp); } ?>
Innerhalb der while-Schleife musst du jetzt noch UPDATE-Queries einbauen, damit deine bereinigten Tags wieder in die DB kommen.
|

27-07-2009, 19:34
|
|
basst
Registrierter Benutzer
|
|
Registriert seit: Jul 2009
Beiträge: 3
|
|
Vielen Vielen Dank,
das hab ich jetzt daraus gemacht, ich fürchte aber es fehlt noch was.
Prinzipiell würde ich auch lieber alles in MYSQL abfeuern z.B. über MYSQL Querybrowser oder phpMyadmin, geht das überhaupt nur mit Mysql, wenn ja wie?
PHP-Code:
<?php $db_server = 'localhost'; $db_name = 'db'; $db_username = 'root';
$db_connection_charset = 'utf8';
$res = mysql_query("SELECT tags FROM group_profile"); while($row = mysql_fetch_array($res)) { $tmp = explode(" ", $row['tags']); foreach($tmp as $key=>$tag) { if(strlen($tag) < 5) { unset($tmp[$key]); } } $neue_tags = implode(" ", $tmp); $sql = "UPDATE group_profile SET tags ='$neue_tags'"; @mysql_query($sql);
} ?>
|

27-07-2009, 19:38
|
|
mkb_webprint
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 53
|
|
Zitat:
Zitat von basst
Vielen Vielen Dank,
das hab ich jetzt daraus gemacht, ich fürchte aber es fehlt noch was.
|
Jop, wenn deine Gruppen-Profile (leite ich jetzt mal ab) eine ID haben (davon gehe ich mal aus), musst du die natürlich in deinem Query mit angeben. Sprich "UPDATE ..... SET ...=... WHERE dein_id_feld=ID_des_Profils"
Du kannst die ID genau wie die Tags aus dem Ergebnis-Array ziehen (z.B. $id = $row['group_id'])
|

29-07-2009, 17:30
|
|
|
Ja sicher die Verbindung:
PHP-Code:
<?php function filter($var) { return strlen($var) > 4; }
$db_server = 'localhost'; $db_name = 'test'; $db_username = 'root'; $db_passwort = '';
$db=mysql_connect($db_server,$db_username,$db_passwort); mysql_select_db($db_name); $res = mysql_query("SELECT text FROM a"); while($row = mysql_fetch_array($res)) { $tmp = explode(" ", $row['text']); $t=array_filter($tmp,'filter'); $sql = "UPDATE a SET text ='".mysql_real_escape_string(implode(" ", $t))."'"; @mysql_query($sql); } ?>
Geändert von piratos (29-07-2009 um 17:33 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|