SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQL

MySQL Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQL diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 21.11.2010, 17:29:39
-sensemann- -sensemann- ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 53
Beiträge: 37
-sensemann- befindet sich auf einem aufstrebenden Ast
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
Mit Zitat antworten
  #2  
Alt 21.11.2010, 17:33:56
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Beiträge: 2.269
DokuLeseHemmung befindet sich auf einem aufstrebenden Ast
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
Mit Zitat antworten
  #3  
Alt 21.11.2010, 18:10:12
-sensemann- -sensemann- ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 53
Beiträge: 37
-sensemann- befindet sich auf einem aufstrebenden Ast
AW: Spalte prüfen.

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Vermutlich ein böser Verstoß gegen die erste Normal Form.
Die 5 Normal Formen
Hat dann wohl schon seine Gründe warum ich das so habe. Hat mir nicht wirklich weitergeholfen deine Antwort !
Mit Zitat antworten
  #4  
Alt 21.11.2010, 19:30:24
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 9
Beiträge: 395
thomas_w befindet sich auf einem aufstrebenden Ast
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.
Mit Zitat antworten
  #5  
Alt 21.11.2010, 19:52:59
-sensemann- -sensemann- ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 53
Beiträge: 37
-sensemann- befindet sich auf einem aufstrebenden Ast
AW: Spalte prüfen.

Da kann ich schon was mit anfangen. Vielen Dank !
Mit Zitat antworten
  #6  
Alt 22.11.2010, 20:26:02
-sensemann- -sensemann- ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 53
Beiträge: 37
-sensemann- befindet sich auf einem aufstrebenden Ast
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

???
Mit Zitat antworten
  #7  
Alt 22.11.2010, 21:06:43
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 9
Beiträge: 395
thomas_w befindet sich auf einem aufstrebenden Ast
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.
Mit Zitat antworten
  #8  
Alt 22.11.2010, 21:18:02
-sensemann- -sensemann- ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 53
Beiträge: 37
-sensemann- befindet sich auf einem aufstrebenden Ast
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 idcount_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
Mit Zitat antworten
  #9  
Alt 22.11.2010, 21:35:06
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 9
Beiträge: 395
thomas_w befindet sich auf einem aufstrebenden Ast
AW: Spalte prüfen.

Zitat:
Zitat von -sensemann- Beitrag anzeigen

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.
Mit Zitat antworten
  #10  
Alt 22.11.2010, 21:43:23
-sensemann- -sensemann- ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 53
Beiträge: 37
-sensemann- befindet sich auf einem aufstrebenden Ast
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
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Load data infile / insert (problem bei einer spalte) tob1 MySQL 1 02.06.2009 07:38:45
if Spalte Inahlt CocaCola PHP Grundlagen 6 27.05.2009 18:25:37
Einzelne Spalte per phpmyadmin in neue Tabelle? bart_the1st MySQL 13 13.04.2008 23:17:42
Altualisieren einer Spalte anhand einer Spalte in einer anderen Tabelle thefifa MySQL 0 25.07.2007 18:34:41
Alle Werte einer Spalte bearbeiten/zurücksetzen Pele007 PHP Grundlagen 2 27.10.2006 15:48:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:08:50 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.


© 2001-2019 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt