php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 2 Stimmen, 3,00 durchschnittlich.
Alt 02.02.2012, 16:51  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
KN-Productions ist zur Zeit noch ein unbeschriebenes Blatt
Standard Nach Feldinhalt suchen und in andere Spalte einsetzen?

Hallo liebe User, ich bin noch ein Noob in PHP und (My-)SQL.

Und da tut sich schon eine Frage auf.

Ich schildere mal die Situation.

Es soll folgendes getan werden:

1. Aus der Tabelle transaktionen_bearbeiten soll aus der Spalte point_send der Wert ausgelesen werden.
2. Dieser Wert soll in der Tabelle wt_usrs in der Spalte username gesucht werden.
3. Wenn eine User-ID übereinstimmt, soll aus der Spalte transfer_amount (der Tabelle transaktionen_bearbeiten) zu der Spalte guthaben (der Tabelle wt_usrs) addiert werden.

Das soll solange wiederholt werden (mit PHP), bis nichts mehr in der Tabelle transaktionen_bearbeiten steht oder point_send mit keinem Wert aus der Spalte username übereinstimmt.

Hört sich für mich ungeheuer kompliziert an, aber ich hoffe, dass ihr mir helft.

Vielen Dank!
LG
KN-Productions
__________________
KN-Productions.de - Vieles für wenig!

Geändert von KN-Productions (02.02.2012 um 16:55 Uhr).
KN-Productions ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.02.2012, 16:57  
Erfahrener Benutzer
 
Registriert seit: 07.12.2009
Beiträge: 843
PHP-Kenntnisse:
Fortgeschritten
chorn befindet sich auf einem aufstrebenden Ast
Standard

Und woran scheitert es jetzt? Was hast du schon versucht? Poste mal Quelltext.
chorn ist offline   Mit Zitat antworten
Alt 02.02.2012, 17:01  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
KN-Productions ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von chorn Beitrag anzeigen
Und woran scheitert es jetzt? Was hast du schon versucht? Poste mal Quelltext.
Ich habe es schon versucht, aber ich kenne nicht die notwendigen Befehle, um das auszuführen. Ja, ich habe mir Mühe gegeben. Ich habe in verschiedenen Büchern gelesen, aber nichts gefunden. Wahrscheinlich weil ich zu doof war.

PHP-Code:
/* Verbindung herstellen */
mysql_connect("localhost","xxxxxx","xxxxxxx");
echo 
"Ich habe eine Verbindung hergestellt.<br /><br /><br />";
/* DB auswählen */
mysql_select_db("xxxxxxxxxxxx");
echo 
"Ich habe die richtige Datenbank ausgew&auml;hlt.<br /><br /><br />";
/*Tabellenabfrage*/
$res mysql_query("SELECT * FROM phpbb_points_log");
echo 
"Jetzt habe ich die korrekte Tabelle abgefragt.<br /><br /><br />";
/*Graf Zahl*/
$nummysql_num_rows($res);
echo 
"$num Transaktionen habe ich insgesamt gefunden. <br /> <br /> <br />";
/*Korrekte Spalte auswählen*/
mysql_query("INSERT INTO transaktionen_bearbeiten
SELECT * FROM phpbb_points_log
    WHERE point_recv = '63'"
);
mysql_query("DELETE FROM phpbb_points_log
             WHERE point_recv = '63';"
);
$numzubearbeiten mysql_num_rows(mysql_query("SELECT * FROM transaktionen_bearbeiten"));
if (
$numzubearbeiten >= 10)
{
$wenigoderviel "Ganz sch&ouml;n viel...";
}
else
{
$wenigoderviel "Ganz sch&ouml;n wenig...";
}
echo 
"$numzubearbeiten Transaktionen muss ich verbuchen. $wenigoderviel<br /><br /><br />" ;

mysql_query("
INSERT INTO wt_usrs (user, guthabenzugabe)
SELECT point_send, point_amount FROM transaktionen_bearbeiten
;"
);

//mysql_query("SELECT SUM(guthaben) AS summe FROM Tabelle;")


/*$altgh = mysql_query("SELECT guthaben FROM wt_usrs");
$zuaddieren = mysql_query("SELECT point_amount FROM transaktionen_bearbeiten"); */
/*if (mysql_query(""));*/

/*$neugh = $altgh + $zuaddieren;
mysql_query("UPDATE wt_usrs SET guthaben =
replace(guthaben, $altgh, $neugh);");
mysql_query("SELECT wt_usrs (user)
             SELECT point_send FROM transaktionen_bearbeiten;")*/
/* UPDATE wt_usrs (guthaben)
             SELECT guthaben FROM wt_usrs + point_amount FROM transaktionen_bearbeiten;*/ 
Wie du siehst, habe ich mich schon versucht, aber es klappt leider nicht.
__________________
KN-Productions.de - Vieles für wenig!
KN-Productions ist offline   Mit Zitat antworten
Alt 02.02.2012, 21:31  
Erfahrener Benutzer
 
Registriert seit: 13.01.2012
Beiträge: 256
PHP-Kenntnisse:
Anfänger
akretschmer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von KN-Productions Beitrag anzeigen
Ich habe es schon versucht, aber ich kenne nicht die notwendigen Befehle, um das auszuführen. Ja, ich habe mir Mühe gegeben. Ich habe in verschiedenen Büchern gelesen, aber nichts gefunden. Wahrscheinlich weil ich zu doof war.

PHP-Code:
/* Verbindung herstellen */
mysql_connect("localhost","xxxxxx","xxxxxxx");
echo 
"Ich habe eine Verbindung hergestellt.<br /><br /><br />";
/* DB auswählen */
mysql_select_db("xxxxxxxxxxxx");
echo 
"Ich habe die richtige Datenbank ausgew&auml;hlt.<br /><br /><br />";
/*Tabellenabfrage*/
$res mysql_query("SELECT * FROM phpbb_points_log");
echo 
"Jetzt habe ich die korrekte Tabelle abgefragt.<br /><br /><br />";
/*Graf Zahl*/
$nummysql_num_rows($res);
echo 
"$num Transaktionen habe ich insgesamt gefunden. <br /> <br /> <br />";
/*Korrekte Spalte auswählen*/
mysql_query("INSERT INTO transaktionen_bearbeiten
SELECT * FROM phpbb_points_log
    WHERE point_recv = '63'"
);
mysql_query("DELETE FROM phpbb_points_log
             WHERE point_recv = '63';"
);
$numzubearbeiten mysql_num_rows(mysql_query("SELECT * FROM transaktionen_bearbeiten"));
if (
$numzubearbeiten >= 10)
{
$wenigoderviel "Ganz sch&ouml;n viel...";
}
else
{
$wenigoderviel "Ganz sch&ouml;n wenig...";
}
echo 
"$numzubearbeiten Transaktionen muss ich verbuchen. $wenigoderviel<br /><br /><br />" ;

mysql_query("
INSERT INTO wt_usrs (user, guthabenzugabe)
SELECT point_send, point_amount FROM transaktionen_bearbeiten
;"
);

//mysql_query("SELECT SUM(guthaben) AS summe FROM Tabelle;")


/*$altgh = mysql_query("SELECT guthaben FROM wt_usrs");
$zuaddieren = mysql_query("SELECT point_amount FROM transaktionen_bearbeiten"); */
/*if (mysql_query(""));*/

/*$neugh = $altgh + $zuaddieren;
mysql_query("UPDATE wt_usrs SET guthaben =
replace(guthaben, $altgh, $neugh);");
mysql_query("SELECT wt_usrs (user)
             SELECT point_send FROM transaktionen_bearbeiten;")*/
/* UPDATE wt_usrs (guthaben)
             SELECT guthaben FROM wt_usrs + point_amount FROM transaktionen_bearbeiten;*/ 
Wie du siehst, habe ich mich schon versucht, aber es klappt leider nicht.
Da sind etliche grobe Probleme:
- keinerlei Fehlerbehandlungen
- select * ist PRINZIPIELL gaaanz schlecht
- ein select *, nur um dann numrows auszuwerten, ist ganz ganz schlecht
- ein insert ... select ... where und dann ein delete where nicht innerhalb einer Transaktion auszuführen ist ebenfalls ganz übel (für sowas würde ich eh wCTE nehmen ...)
- a bissl klingt das, was Du machen willst, nach Queues in SQL. Falls dem so ist, sei Dir http://johtopg.blogspot.com/2010/12/queues-in-sql.html zum lesen empfohlen
- aber eigentlich glaube ich, man könnte alles mit einem (1) SQL machen, was Du da treibst, aber ich hab grad keine Lust, die Logic reverse zu ergründen...


Andreas
akretschmer ist offline   Mit Zitat antworten
Alt 03.02.2012, 01:29  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.629
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von KN-Productions Beitrag anzeigen
Wie du siehst, habe ich mich schon versucht, aber es klappt leider nicht.
An deinen Queries ist so ziemlich alles falsch was nur falsch sein kann.

PHP:
mysql_query liefert eine Ressource, keinen Wert. Nachzulesen im PHP Handbuch.
http://php.net/manual/de/function.mysql-query.php

Da gibt es auch ein komplettes Beispiel wie man Werte zeilenweiße ausliest.

PHP-Code:
/*$neugh = $altgh + $zuaddieren; 
Ressourcen kann man nicht addieren.

mysql_query kann auch nur einen Befehl verarbeiten. Mehrere mit ; trennen bringt dir also nichts.

MySQL:
Code:
SELECT guthaben FROM wt_usrs
liefert dir ALLE Zeilen der Tabelle und jeweils nur die Spalte guthaben. Bringt dir rein gar nichts weil du A) nur das guthaben bestimmter Leute bruachst, und B) du nur über das guthaben den User (die Originalzeile) nicht mehr identifizieren kannst.

die REPLACE() Funktion ersetzt Stringwerte. Beispiel:
Code:
REPLACE('test123', '134', 'abc') => testabc
Nachzulesen hier: http://dev.mysql.com/doc/refman/5.1/...nction_replace

Code:
"SELECT wt_usrs (user) 
             SELECT point_send FROM transaktionen_bearbeiten;"
Das ist totaler Murks. Der Syntax ist so falsch wie er nur falsch sein kann.
SELECT Syntax nachlesen: http://dev.mysql.com/doc/refman/5.1/de/select.html

Code:
SELECT guthaben FROM wt_usrs + point_amount FROM transaktionen_bearbeiten;
Zweimal FROM ist Müll. Und "Tabelle + Spalte" rechnen zu wollen ebenso. Siehe SELECT Syntax oben.

Generell:

Hast du dir die Aufgabe selbst gestellt oder gestellt bekommen? Im letzten Fall würde ich den Aufgabestellenden (Lehrer/Ausbilder) zu Rate ziehen, da es seine Aufgabe ist dir das beizubringen und das offensichtlich gründlich in die Hose geht.

Zitat:
Ja, ich habe mir Mühe gegeben. Ich habe in verschiedenen Büchern gelese
In den Handbüchern zu PHP und MySQL steht verdammt viel zu der Materie. Siehe meine Links.

Zitat:
1. Aus der Tabelle transaktionen_bearbeiten soll aus der Spalte point_send der Wert ausgelesen werden.
2. Dieser Wert soll in der Tabelle wt_usrs in der Spalte username gesucht werden.
3. Wenn eine User-ID übereinstimmt, soll aus der Spalte transfer_amount (der Tabelle transaktionen_bearbeiten) zu der Spalte guthaben (der Tabelle wt_usrs) addiert werden.
Ist mit 2 Befehlen zu lösen (wenn die Bearbeiteten Transaktionen auch wieder gelöscht werden sollen).

Ich werde dir die Lösung nicht posten. Denn in deinen Code sind so viele Fehler die einen Wissensstand offenbaren der mir suggeriert das du mit einer Fertiglösung auch gnadenlos überfordert wärst.

Die Optimallösung beinhaltet obendrein eine JOIN-Klausel.

Zitat:
Wahrscheinlich weil ich zu doof war.
Mit der Einstellung wird das sowieso nix und endet in willkürklichem rumraten. Zerleg das Problem in logische Teile und löse diese Schritt für Schritt.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

Geändert von Dark Guardian (03.02.2012 um 01:33 Uhr).
Dark Guardian ist gerade online   Mit Zitat antworten
Alt 03.02.2012, 09:54  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
KN-Productions ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke, dass du dir die Zeit genommen hast, mir zu antworten.

Ja, es kann sein, dass ich mit der Lösung überfordert sein werde.

Allerdings habe ich momentan weder Zeit noch Lust, mir das anzueignen. Wenn meine Frage beantwortet ist, lese ich mir auch meine Bücher durch und googele, wenn ich etwas nicht verstanden habe.

Das was du gepostet hast, ist ja nett, aber mir bringt es nichts, da ich nicht weiß, wie das zu kombinieren ist.

Wenn du es nicht posten möchtest, weil du denkst, ich würde mich andauernd mit CODE-Gebettel durchschlagen, möchte ich dir sagen, dass das falsch ist. Und zu sagen, dass du es weißt, und mir Links zu php.net zu schicken, ist auch nicht viel Hilfe.

Und ich hoffe, dass mir irgendjemand dabei helfen kann.
__________________
KN-Productions.de - Vieles für wenig!
KN-Productions ist offline   Mit Zitat antworten
Alt 03.02.2012, 10:27  
Erfahrener Benutzer
 
Registriert seit: 13.01.2012
Beiträge: 256
PHP-Kenntnisse:
Anfänger
akretschmer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von KN-Productions Beitrag anzeigen
Danke, dass du dir die Zeit genommen hast, mir zu antworten.

Ja, es kann sein, dass ich mit der Lösung überfordert sein werde.

Allerdings habe ich momentan weder Zeit noch Lust, mir das anzueignen. Wenn meine Frage beantwortet ist, lese ich mir auch meine Bücher durch und googele, wenn ich etwas nicht verstanden habe.

Das was du gepostet hast, ist ja nett, aber mir bringt es nichts, da ich nicht weiß, wie das zu kombinieren ist.

Wenn du es nicht posten möchtest, weil du denkst, ich würde mich andauernd mit CODE-Gebettel durchschlagen, möchte ich dir sagen, dass das falsch ist. Und zu sagen, dass du es weißt, und mir Links zu php.net zu schicken, ist auch nicht viel Hilfe.

Und ich hoffe, dass mir irgendjemand dabei helfen kann.

Ich zeige Dir, wie man inklusive des Löschens für alle datensätze, für die es zutrifft, alles in EINEM SQL-Befehl machen kann.

Ausgangssituation:

Code:
test=# select * from transaktionen_bearbeiten ;
 point_send | transfer_amount
------------+-----------------
 user1      |              10
 user2      |              20
 user3      |              30
(3 rows)

Time: 0,144 ms
test=*# select * from wt_usrs ;
 username | guthaben
----------+----------
 user1    |        1
 user3    |        3
 user5    |        5
(3 rows)
Trifft also für user1 und user3 zu. Jetzt mein Befehl:

Code:
test=*# with transfer as (update wt_usrs w set guthaben = guthaben + t.transfer_amount from transaktionen_bearbeiten t where w.username=t.point_send returning t.*)  delete from transaktionen_bearbeiten where point_send in (select point_send from transfer);
DELETE 2
Time: 0,574 ms
test=*# select * from transaktionen_bearbeiten ;
 point_send | transfer_amount
------------+-----------------
 user2      |              20
(1 row)

Time: 0,401 ms
test=*# select * from wt_usrs ;
 username | guthaben
----------+----------
 user5    |        5
 user1    |       11
 user3    |       33
(3 rows)
Du siehst, nur ein Befehl, das ist eine atomare Operation, und alle Datensätze bearbeitet und auch aus der ersten Tabelle gelöscht.


Und jetzt gehst Du in Dein Kämmerchen und lernst SQL und PHP.

Und ja: Du brauchst es nicht mit MySQL zu versuchen, es wird nicht funktionieren, das geht erst ab PostgreSQL 9.1. Aber Du lernst ja nun SQL und wirst es anpassen können.



Andreas
akretschmer ist offline   Mit Zitat antworten
Alt 03.02.2012, 17:58  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.629
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von KN-Productions Beitrag anzeigen
Allerdings habe ich momentan weder Zeit noch Lust, mir das anzueignen.
Dann erstelle ein Thema in die Scriptbörse und bezahle jemanden dafür. Nur weil du nicht backen kannst, und es auch nicht lernen willst, erwartest du auch nicht das ein Bäcker dir sein Brötchen schenkt, selbst wenn es nur 19 Cent kostet.

Das Schreiben meines letzten Postings hat mich gute 15 Minuten gekostet. Für ein "ich hab keine lust das zu lernen" als Antwort. Soviel zum Thema "Bemühungen".

Zitat:
Zitat von KN-Productions Beitrag anzeigen
Das was du gepostet hast, ist ja nett, aber mir bringt es nichts, da ich nicht weiß, wie das zu kombinieren ist.
Dann lerne es.

Zitat:
Zitat von KN-Productions Beitrag anzeigen
Und zu sagen, dass du es weißt, und mir Links zu php.net zu schicken, ist auch nicht viel Hilfe.
Wenn dir die Erklärungen aus den offiziellen Handbüchern nicht gut genug sind, beleg nen Kurs an einer VHS.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

Geändert von Dark Guardian (03.02.2012 um 18:01 Uhr).
Dark Guardian ist gerade online   Mit Zitat antworten
Alt 03.02.2012, 18:03  
Neuer Benutzer
 
Registriert seit: 02.02.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
KN-Productions ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Thema hat sich erledigt.
__________________
KN-Productions.de - Vieles für wenig!
KN-Productions ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
* mysql 2 tabellen / spalte minus spalte sandrasandra Datenbanken 11 13.04.2010 11:02
[Erledigt] Name der Spalte verboten? supplied argument is not a valid MySQL result re AXELB Datenbanken 5 14.12.2009 21:00
Daten aus einer Spalte in eine andere Tabelle einfügen Datenbanken 6 22.10.2009 12:41
[Erledigt] neue Spalte Füllen ketchup PHP Tipps 2009 11 17.02.2009 15:51
[Erledigt] spalte nach werten durchsuchen und ändern ketchup PHP Tipps 2009 12 10.02.2009 09:15
Frage: richtige SQL Abfrage von einer MySQL Spalte die SET werte besitzt Seb PHP Tipps 2008 2 29.05.2008 11:36
Durch Spalte definieren, welche Spalte zu ändern ist. CC84 Datenbanken 5 28.11.2006 10:26
spalte rechts ausrichten, text aber trotzdem linksbündig Crypi HTML, Usability und Barrierefreiheit 5 14.09.2006 11:35
Spalte mit Array angleichen Zahl Datenbanken 3 16.07.2006 18:08
Auslesen Spalte + Andere Tabelle andrew22 PHP Tipps 2006 2 16.06.2006 10:51
Werte aus gesamter Spalte zählen rotzlöffel PHP Tipps 2006 17 14.05.2006 20:28
Datenbank spalten kopiere in einer andere Spalte medico Datenbanken 10 08.05.2006 16:52
Links aus Datenbank überprüfen und wen defekt spalte updaten PHP Tipps 2005-2 2 05.09.2005 11:34
doppelte Werte / Strings einer Spalte nur einmal ausgeben... Datenbanken 2 29.07.2005 12:10
Eine weitere Spalte -> weiße Seite seejay HTML, Usability und Barrierefreiheit 3 04.07.2005 08:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php suchen einsetzen, suchen nach einer zeile aus einer datenbank, sql feldinhalt durchsuchen, http://www.kn-productions.de/

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:58 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum