php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.01.2010, 22:53  
Neuer Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
conviva befindet sich auf einem aufstrebenden Ast
Standard Werte innerhalb Tabellen kopieren

Hallo,

meine Frage betrifft PHP und mysql, die Lösung wird sich wohl in PHP
findet, deshalb der Beitrag hier.

Ich möchte Werte aus einer mysql Tabelle in eine andere Tabelle kopieren
ohne dabei Duplikate zu erzeugen. Mit 'insert ignore into' gabs Probleme,
Feld konnte ich auch nicht auf 'unique' setzen.
Daher möchte ich die Werte aus Tabelle 1 einlesen und in Tabelle 2
kopieren, wobei in Tabelle 2 nicht die Werte überschrieben werden sollen
die sich dort schon befinden.
Also Werte aus Tabelle 2 in Schleife einlesen und vergleichen, funktioniert
leider nicht.

Aus Tabelle 1 benötige 1 eine Spalte
Mein Ansatz:

PHP-Code:
$linkarray=array();
$sql=("SELECT boardid FROM Tabelle1 WHERE userid=$user[userid]");
$result=mysql_query($sql);
while(
$row=mysql_fetch_array($result)){
$linkarray[]=$row['boardid'];

Dann das kopieren der Tabelle:

PHP-Code:
query("INSERT INTO Tabelle2  (boardid, userid, lastvisitedtime)
        SELECT
        boardid, $user[userid], " 
time() . "
        FROM
        Tabelle1
        where boardid NOT IN (" 
$linkarray ")     "); 
Ich habe schon etliche Änderung durchgeführt, die ich mittlerweile
nicht mehr nachvollziehen kann.

Hat jemand einen Lösungsansatz?

Vielen Dank
Conviva
conviva ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.01.2010, 23:40  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 682
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

INSERT INTO table2 SELECT * FROM table1;
CREATE TABLE table3 SELECT DISTINCT * FROM table2;
DROP TABLE table3;
ALTER TABLE name table3 table2;
Harry_X ist offline  
Alt 11.01.2010, 08:55  
Neuer Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
conviva befindet sich auf einem aufstrebenden Ast
Standard

Danke, ist sicherlich eine Möglichkeit.

Ich würde es jedoch gerne etwas einfacher haben,

gucke in die Tabelle2, beim user ($user[userid]) sind
z.B. die Spalten boardid 1, 5 und 7.
Es gibt laut Tabelle1 aber die boardid 1, 2, 3, 4, 5, 6, 7.
Also kopiere die Spalten 2, 3, 4, 6 in die Tabelle2 des users.

PHP-Code:
$r_test query("SELECT boardid FROM board ");
$r_test2 query("SELECT boardid FROM lastvisited where userid=$g_user[userid] "); 
conviva ist offline  
Alt 11.01.2010, 09:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Wo genau lagen denn die Probleme mit INSERT IGNORE?

Du kannst IN () genauso mit einer Subquery benutzen. Wozu also der Umweg über PHP?

Probier mal:
Code:
INSERT INTO Tabelle2  (boardid , userid , lastvisitedtime)
       SELECT (T1.boardid , T1.userid, T1.lastvisitedtime) 
       FROM   Tabelle1 T1
       WHERE  T1.boardid NOT IN (SELECT T2.boardid FROM Tabelle2 T2)
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 11.01.2010, 12:03  
Neuer Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
conviva befindet sich auf einem aufstrebenden Ast
Standard

Mit leichten Änderung (AS T1 statt nur T1 sowie Weglassen der
Klammern im 1. select) funktioniert das Kopieren, allerdings sind die boardid,
welche in beiden Tabellen vorhanden sind, dann wieder doppelt in der Ausgabe.
PHP-Code:
$r_test query("INSERT INTO
       lastvisited
      (boardid , userid , lastvisitedtime)
       SELECT
       T1.boardid , $g_user[userid], " 
time() . "
       FROM
       board AS T1
       WHERE
       T1.boardid NOT IN ('SELECT T2.boardid FROM lastvisited AS T2')
       "
); 
PHP-Code:
T1.boardid NOT IN ('SELECT boardid FROM lastvisited '
bringt die gleiche, falsche Ausgabe, also doppelt.

Ist im Grunde schon alles OK, nur an der Abfrage
'wo die boardid aus Tabelle1 nicht in Tabelle2 ist'
haperts noch.
conviva ist offline  
Alt 11.01.2010, 12:21  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich habe auch nicht ohne Grund
Code:
T1.boardid NOT IN (SELECT T2.boardid FROM Tabelle2 T2)
und nicht
Code:
T1.boardid NOT IN ('SELECT T2.boardid FROM lastvisited AS T2')
geschrieben.

Mit den Klammer hast Du recht, AS ist dagegen optional bei MySQL
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 11.01.2010, 12:40  
Neuer Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
conviva befindet sich auf einem aufstrebenden Ast
Standard

Lass ich die Anführungzeichen weg gibts einen:

You have an error in your SQL syntax
conviva ist offline  
Alt 11.01.2010, 12:43  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

You have an error … und weiter? An welcher Position?

Laut Manual sollte es gehen: MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.8.3 Unterabfragen mit ANY, IN und SOME . Mags jetzt gerade nicht ausprobieren.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 11.01.2010, 12:53  
Neuer Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 11
PHP-Kenntnisse:
Anfänger
conviva befindet sich auf einem aufstrebenden Ast
Standard

Genau in der Reihe wo ich die Anführungszeichen weggelassen habe.
conviva ist offline  
Alt 11.01.2010, 13:08  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Geht bei mir einwandfrei.

Code:
CREATE TABLE IF NOT EXISTS `board` (
  `boardid` int(11) default NULL,
  `userid` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `board` (`boardid`, `userid`) VALUES
(1, 2),
(2, 3),
(3, 4),
(4, 5);


CREATE TABLE IF NOT EXISTS `lastvisited` (
  `boardid` int(11) default NULL,
  `userid` int(11) default NULL,
  `lastvisitedtime` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `lastvisited` (`boardid`, `userid`, `lastvisitedtime`) VALUES
(1, 2, NULL),
Code:
INSERT INTO
       lastvisited (boardid , userid , lastvisitedtime)
       SELECT
       T1.boardid , 1234 , 1234
       FROM
       board AS T1
       WHERE
       T1.boardid NOT IN (SELECT T2.boardid FROM lastvisited AS T2)
Code:
boardid     userid      lastvisitedtime
1           2           NULL
2           1234        1234
3           1234        1234
4           1234        1234
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
 


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
[Erledigt] SELECT aus 2 Tabellen, mehrere Werte von Tabelle2 in einem Feld - wie? 6setzen PHP Tipps 2009 7 25.12.2009 13:21
[Erledigt] Tabellen von 2 Datenbanken kopieren themonk Datenbanken 9 13.08.2009 17:30
[Erledigt] werte aus 2 tabellen summieren tommi89 Datenbanken 9 10.03.2009 11:37
2 werte aus Tabellen vergleichen und einen 3. ausgeben LB1981 PHP Tipps 2009 6 12.02.2009 00:25
Daten identischer Tabellen kopieren R4v3r Datenbanken 2 28.09.2007 16:32
Tabellen kopieren ohne bestimmte Zeilen HaraDej Datenbanken 2 01.08.2007 15:49
Tabellen Eintrag erstellen ohne Werte anzugeben Schaelle Datenbanken 4 03.09.2005 15:44
Brauche Werte aus 2 Tabellen PHP Tipps 2005-2 2 20.08.2005 12:20
Werte aus 2 Tabellen abfragen? nsane Datenbanken 10 16.07.2005 12:47
Tabellen kopieren? Datenbanken 2 17.05.2005 08:53
Titel geändert: Mehrere Tabellen innerhalb IF PHP Tipps 2005 9 16.05.2005 11:28
tabellen kopieren aircrash Datenbanken 1 19.01.2005 23:18
Werte aus zwei Tabellen verknüpfen? Datenbanken 12 05.01.2005 10:41
[Erledigt] Query, der Daten innerhalb DB zwischen Tabellen verschiebt Datenbanken 6 18.09.2004 14:38
Werte aus 2 Tabellen in eine 3. abspeichern! Boennchen Datenbanken 2 09.08.2004 15:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-einsteiger/63230-werte-innerhalb-tabellen-kopieren.html, insert into werte kopieren, mysql spalten zwischen tabellen kopieren, mysql felder kopieren 2 tabellen, daten vergleichen und werte in tabelle kopieren, php script kopiere aus tabelle in tabelle, mysql daten von einer in die andere tabelle kopieren und dabei spalten miteinander vergleichen, mysql tabellen kopieren unique, mysql daten in tabelle kopieren php, mysql werte von tabelle 1 in tablle 2 kopieren, die werte von eine tabelle in andere kopieren insert into, werte vergleichen und tabelle kopieren, select sql 2 werte kopieren, php tabelle werte kopieren, mysql datensatz innerhalb einer tabelle kopieren, mysql spalten in andere tabelle kopieren, mysql tabelle1 in tabelle2 kopieren, sql wert von tabelle in andere tabelle kopieren, mysql tabelle kopieren you have an error in your sql syntax, mysql alle werte einer tabelle kopieren

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:55 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