CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
21.11.2010, 18:29:39
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 59
Beiträge: 37
|
|
Spalte prüfen.
Hallo zusammen,
ich hab eine Spalte einer Tabelle in der stehen z.b. folgende Werte:
123456;000000;456789;
also immer 6 Zahlen und ein Semikolon.
Gibt es eine Abfrage mir der ich überprüfen kann ob ich Fehler habe ? Also prüfen ob die Zahlen auch immer 6 stellig sind ?
Gruß
Sensemann
|
21.11.2010, 18:33:56
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Spalte prüfen.
Zitat:
also immer 6 Zahlen und ein Semikolon.
|
Vermutlich ein böser Verstoß gegen die erste Normal Form.
Die 5 Normal Formen
|
21.11.2010, 19:10:12
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 59
Beiträge: 37
|
|
AW: Spalte prüfen.
Zitat:
Zitat von DokuLeseHemmung
|
Hat dann wohl schon seine Gründe warum ich das so habe. Hat mir nicht wirklich weitergeholfen deine Antwort !
|
21.11.2010, 20:30:24
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
|
|
AW: Spalte prüfen.
Ich hab's mal mit einer STORED FUNCTION probiert. Hier ein kleiner Test dazu:
Code:
CREATE TABLE test_string (
id INT NOT NULL,
csv_daten VARCHAR(100)
);
INSERT INTO test_string VALUES
( 1, '1234;12345;12456;1234567;12345678'),
( 2, '1234;12345;12456;1234567;12345678;'),
( 3, '1234;12345;12456;1234567;1;2345678;');
DELIMITER $$
CREATE FUNCTION count_substring(p_sVar VARCHAR(100), p_sSep VARCHAR(10) )
RETURNS INT
LANGUAGE SQL
BEGIN
DECLARE v_i INT;
DECLARE v_length INT;
DECLARE v_count INT;
SET v_length := LENGTH(p_sVar);
SET v_i := 1;
SET v_count := 0;
WHILE (v_i <= v_length) DO
IF SUBSTRING(p_sVar,v_i,1) = p_sSep THEN
SET v_count := v_count +1;
END IF;
SET v_i := v_i +1;
END WHILE;
RETURN v_count;
END$$
DELIMITER ;
SELECT id, count_substring(csv_daten,';') AS anzahl_sep from test_string
where count_substring(csv_daten,';') > 3
order by id;
+----+------------+
| id | anzahl_sep |
+----+------------+
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |
+----+------------+
3 rows in set (0.00 sec)
mysql>
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
|
21.11.2010, 20:52:59
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 59
Beiträge: 37
|
|
AW: Spalte prüfen.
Da kann ich schon was mit anfangen. Vielen Dank !
|
22.11.2010, 21:26:02
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 59
Beiträge: 37
|
|
AW: Spalte prüfen.
PHP-Code:
DELIMITER // CREATE FUNCTION count_substring(p_sVar VARCHAR(100), p_sSep VARCHAR(10) ) RETURNS INT LANGUAGE SQL BEGIN DECLARE v_i INT; DECLARE v_length INT; DECLARE v_count INT;
SET v_length := LENGTH(p_sVar); SET v_i := 1; SET v_count := 0;
WHILE (v_i <= v_length) DO IF SUBSTRING(p_sVar,v_i,1) = p_sSep THEN SET v_count := v_count +1; END IF; SET v_i := v_i +1; END WHILE; RETURN v_count; END$$
DELIMITER ;
SELECT `products_model`, count_substring(products_userfield_2,';') AS anzahl_sep from products where count_substring(products_userfield_2,';') > 3 order by `products_model`
bringt folgendes :
SQL-Befehl: Dokumentation
SELECT `products_model` , count_substring(
products_userfield_2, ';'
) AS anzahl_sep
FROM products
WHERE count_substring(
products_userfield_2, ';'
) >3
ORDER BY `products_model`
LIMIT 0 , 30
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(products_userfield_2,';') AS anzahl_sep from products
where count_substring(pro' at line 1
???
|
22.11.2010, 22:06:43
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
|
|
AW: Spalte prüfen.
Damit wir Dir helfen können, brauch es schon mehr als ein paar ???, sondern mindestens..
1. Die Strukturen der beteiligten Tabellen
Code:
mysql>SHOW CREATE TABLE products;
2. Ein paar sinnvolle Testdaten um den Fehler zu reproduzieren
Code:
INSERT INTO orders ....
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
|
22.11.2010, 22:18:02
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 59
Beiträge: 37
|
|
AW: Spalte prüfen.
Ist ja im Grunde nichts anderes wie Du mir oben das Beispiel gegeben hast !
PHP-Code:
DELIMITER $$ CREATE FUNCTION count_substring(p_sVar VARCHAR(100), p_sSep VARCHAR(10) ) RETURNS INT LANGUAGE SQL BEGIN DECLARE v_i INT; DECLARE v_length INT; DECLARE v_count INT; SET v_length := LENGTH(p_sVar); SET v_i := 1; SET v_count := 0; WHILE (v_i <= v_length) DO IF SUBSTRING(p_sVar,v_i,1) = p_sSep THEN SET v_count := v_count +1; END IF; SET v_i := v_i +1; END WHILE; RETURN v_count; END$$
DELIMITER ;
SELECT id, count_substring(csv_daten,';') AS anzahl_sep from test_string where count_substring(csv_daten,';') > 3 order by id;
Tabelle und Inserts wurden so angelegt wie Du beschrieben hast.
Die $$ bei DELIMITER musste ich durch // ersetzen damit MYSQL überhaupt was macht.
Hier mal die Fehlermeldung von deinem Script mit deiner Tabelle und deinem Insert :
HTML-Code:
DELIMITER $$ CREATE FUNCTION count_substring(
p_sVar VARCHAR( 100 ) ,
p_sSep VARCHAR( 10 )
) RETURNS INTLANGUAGE SQL BEGIN DECLARE v_i INT;
DECLARE v_length INT;
DECLARE v_count INT;
SET v_length := LENGTH( p_sVar ) ;
SET v_i :=1;
SET v_count :=0;
WHILE(
v_i <= v_length
) DO IF SUBSTRING( p_sVar, v_i, 1 ) = p_sSep THEN SET v_count := v_count +1;
END IF ;
SET v_i := v_i +1;
END WHILE;
RETURN v_count;
END$$
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(p_sVar VARCHAR(100), p_sSep VARCHAR(10) )
RETURNS INT
LANGUAGE SQL
BEGIN
' at line 1
Wenn ich die $$ ersetze durch // (weil ich das irgendwo gelesen habe, ob richtig ist weiß ich nicht) nur noch dies :
HTML-Code:
Fehler
SQL-Befehl: Dokumentation
SELECT id, count_substring(
csv_daten, ';'
) AS anzahl_sep
FROM test_string
WHERE count_substring(
csv_daten, ';'
) >3
ORDER BY id
LIMIT 0 , 30
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(csv_daten,';') AS anzahl_sep from test_string
where count_substring(csv_daten,'' at line 1
Zumindest wird mit // die Funktion genommen.
Ich hab leider keinen Plan und probiere nur so rum !
Gruß
Sensemann
|
22.11.2010, 22:35:06
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
|
|
AW: Spalte prüfen.
Zitat:
Zitat von -sensemann-
DELIMITER $$ CREATE FUNCTION count_substring(p_sVar VARCHAR(100), p_sSep VARCHAR(10) )
RETURNS INT
...
|
Der DELIMITER $$ ist ein eigener Befehl, der mit einem Zeilenumbruch abgeschlossen sein muss. In der neuen Zeile beginnt dann das CREATE ...
Also genau so, wie ich es in meinem Beispiel (#4) beschrieben habe. Wenn Du den gesamten Code 1 zu 1 in die Zwischenablage kopierst und in der MySQL-Kommandozeile einfügt, wird alles korrekt ausgeführt.
Ob als DEMILITER und als Ende der CREATE Function das $$ oder // verwendet wird, ist egal. Beides funktioniert. Allerdings nicht gemischt.
Wie Du in #4 sieht, habe ich alles in der MySQL-Konsole korrekt ausgeführt (MySQL 5.1.44). MySQL-Versionen vor 5.0 können kein CREATE FUNCTION ...
Einfach noch mal konzentriert das Beispiel #4 durchgehen. Dann klappt es schon.
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
|
22.11.2010, 22:43:23
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 59
Beiträge: 37
|
|
AW: Spalte prüfen.
Dann hab ich wohl eine Version wo es nict funktioniert !
MySQL-Client-Version: 5.0.83
Geht nämlich nicht 1 : 1 Nur Fehler.
Danke erst mal !
Gruß
Sensemann
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 02:37:04 Uhr.
|