• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

mysql begrenzungsbereich

Tectum

New member
hallo Leute, tüftel sxchon die ganze zeit rum aber ich komm zu keiner ausgabe:

Habe ein festes JAhr $jahr=1942 das als Grenzwert dient, ich will ne abfrage aus der db ziehn dass mir bei den Geburtsdaten alle kleiner $jahr ausgibt.
in der db steht in der spalte gebdat das format dd.mm.YYYY

PHP:
$sql = mysql_query("SELECT * FROM ava_kunden WHERE gebdat<='%$jahr'") OR die(mysql_error());

wär sehr dankbar über ein kleinen Tipp, danke
 
Das ist der Nachteil am deutschen Datumsformat - es lässt sich nicht gut sortieren. Aber für exakt dieses Problem gibt es in MySQL das Spaltenformat DATE - lässt sich nicht nur gut sortieren (und deine Ausgabe wäre ganz einfach:
Code:
SELECT * FROM `ava_kunden` WHERE `gebdat`<= '$jahr'
) sondern prüft bei der Eingabe auch die Validität der Eingabe.

Wenn du unbedingt dieses Format beibehalten willst musst du hald mit SUBSTRING_INDEX arbeiten:
Code:
SUBSTRING_INDEX(`gebdat`, '.', -1) <= '$jahr'

PS: pass auf SQL-Injections auf.
 
So?
PHP:
$sql = mysql_query("SELECT SUBSTRING_INDEX(`gebdat`, '.', -1) <= '$jahr' FROM ava_kunden") OR die(mysql_error());
 
thx, es funzt soweit, ich hab nun knapp 78.000 Datensätze in der mysql, jetzt will ich was an den datensätzen ausführen lassen, jetzt sagt der mir: MySQL client ran out of memory

und jetzt?????
 
wie schalte ich denn den catch aus, irgendwie funktioniert das nicht :(
Ich würde mal sagen gar nicht. Das Beispiel aus dem Link verwendet den ODBC Treiber von MySQL. Ich denke nicht, dass Du diesen verwendest. Auch sonst wirst Du keine direkten Kommandozeilen Parameter an mysql übergeben können, wenn Du per PHP auf die Datenbank zugreifst.
Fakt ist, dass Dein Hoster den Speicher für MySQL und vermutlich PHP begrenzt hat. Wenn Deine Operation also zuviel Speicher benötigt, und Du keine alternative Möglichkeit des Zugriffs auf Deine DB hast (z.B. SSH), dann bleibt Dir nur entweder das Aufteilen der Operation auf mehrere Teiloperationen oder ein Upgrade Deines Hosting Pakets.
 
Oder eine genaue Analyse der Abfrage und Tabellenformate, u.U. ist das vermurkst, wenn schon das falsche Datenformat gewählt wurde, kann ich mir durchaus vorstellen, dass da noch mehr im argen liegt.
 
Faulheit bestimmt nicht, wenn dann unwissenheit, meine funktion soll einfach bei allen datensätzen die unterhalb der Jahrgangsgrenze liegen einen wert in action speichern, wüßte nicht wie man das effektiver lösen könnte als mit SELECT:

PHP:
$sql = mysql_query("SELECT * FROM ava_kunden WHERE SUBSTRING_INDEX(`gebdat`, '.', -1) <= '$is_jahr'") OR die(mysql_error());
while($row = mysql_fetch_array($sql))
{
	$id 	= $row['id'];
	mysql_query("UPDATE ava_kunden SET action='2' WHERE id='$id'");
}
 
du brauchst doch nur die id:
SELECT `id` FROM ...

aber ansonsten kannst du das doch viel einfacher in sql machen...
Code:
UPDATE ava_kunden SET action='2' WHERE SUBSTRING_INDEX(`gebdat`, '.', -1) <= '$is_jahr'
 
also so?
PHP:
$sql = mysql_query("SELECT 'id' FROM ava_kunden WHERE SUBSTRING_INDEX(`gebdat`, '.', -1) <= '$is_jahr'") OR die(mysql_error());
while($row = mysql_fetch_array($sql))
{
	$id 	= $row['id'];
	mysql_query("UPDATE ava_kunden SET action='2' WHERE id='$id'");
}
 
sorry ich mach das noch nicht lange, hab immer mit * gearbeitet, weil ich das irgendwo so gelesen habe, tut mir echt leid, ist nicht so, dass ich es mit absicht gemacht habe
 
einfach disen query ausführen und fertig!
Code:
UPDATE ava_kunden SET action='2' WHERE SUBSTRING_INDEX(`gebdat`, '.', -1) <= '$is_jahr'
 
Bombe diese verkürzten schreibweisen, da arbeitet das skript ja deutlich schneller :)

kurz für doofe, wie mach ich das in einfach?
PHP:
$is_sql 	= mysql_query("SELECT jahr FROM ava_settings WHERE id='1'");
$is_row 	= mysql_fetch_array($is_sql);
$is_jahr 	= $is_row['jahr'];
 
Tut mir leid, dass ich euch hier nerve, hab diese kurzen schreibweisen jetzt überall übernommen, aber bei meinem dublettencheck, das sind ja zwei abfragen in einem, wie kann man das einfacher machen?

PHP:
$sql = mysql_query("SELECT id,tel FROM ava_kunden") OR die(mysql_error());
while($row = mysql_fetch_array($sql))
{
	$id 	= $row['id'];
	$tel 	= $row['tel'];
	
	$sql2 = mysql_query("SELECT id FROM ava_kunden WHERE tel='$tel' AND id!='$id'") OR die(mysql_error());
	while($row2 = mysql_fetch_array($sql2))
	{
		$id2 = $row2['id'];
		if($id!=$id2){
			mysql_query("UPDATE ava_kunden SET action='1' WHERE id='$id2'");
			mysql_query("UPDATE ava_kunden SET action='0' WHERE id='$id'");
		}
	}
}
 
Zurück
Oben