php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.12.2007, 16:18  
Erfahrener Benutzer
 
Registriert seit: 09.12.2004
Beiträge: 250
nixdorf
Standard INSERT - Abfrage

Hallo,

ich habe zwei Tabellen,


Tabelle1

id image wert

1 bild3.jpg 7
2 bild4.jpg 88
3 bild7.jpg 55


Tabelle2

id image farbe

1
2
3

jetzt soll aus Tabelle1 die angaben der Spalte image in die Tabelle2 Spalte Image eingefügt werden wo die gleiche id ist.

Es soll dann so aussehen:

id image farbe

1 bild3.jpg
2 bild4.jpg
3 bild7.jpg

wie kann ich daß machen?


Gruß Nixdorf
nixdorf ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 24.12.2007, 11:59  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Geht das überhaupt? INSERT SELECT kenn ich, UPDATE SELECT nicht.

Notfalls mit einer PHP-Schleife!
Zergling-new ist offline   Mit Zitat antworten
Alt 25.12.2007, 22:26  
phyton
Gast
 
Beiträge: n/a
Standard

hallo nixdorf
ja ich hätte da was aber das hat nichts mit INSERT SELECT oder UPDATE SELECT zu tun, ich mach das auf die alte Weise^^

Also jetzt mal mein Code:
PHP-Code:
<?php
//VERBINDUNG
mysql_connect($verbindung);
mysql_select_db(datenbank);

$sql "SELECT * FROM tabelle_1";
$res mysql_query($sql);

$sid "1";
while (
$erg mysql_fetch_assoc($res))
{
$sqlab "UPDATE tabelle_2 SET image='".$erg["image"]."', farbe='".$erg["wert"]."' WHERE id='".$sid."'";
mysql_query($sqlab);
$sid $sid 1;
}

//VERBINDUNG TRENNEN
mysql_free_result($res);
mysql_close($verbindung);
?>
Zur Erklärung: Als erstes wird die verbindung zur datenbank hergestellt. danach ruft er alle daten der tabelle 1 ab (falls die so heißen sollte) danach gibt es eine schleife die so oft ausgeführt wird, wie viele einträge es in tabelle 1 gibt. Jetzt wird tabelle 2 updatet und mit der $sid id gesteuert. Danach wird $sid um 1 erhöht, das geht solange bis kein eintrag mehr da ist. ich hoffe dein problem hat sich jetzt gelöst :wink:



pHyToN
  Mit Zitat antworten
Alt 26.12.2007, 02:26  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Möglicherweise macht das Anlegen einer neuen temporären Tabelle Sinn. Diese fütterst du mit INSERT SELECT. Dabei besteht natürlich die Möglichkeit, Spalten und Wert-Zuweisung zu überschreiben.
Am Ende wenn alles stimmt, löscht du das Original und benennst die temporäre Tabelle in die des Originals um.

Könnte bei vielen Datensätzen einen Zeitgewinn bringen.
Zergling-new ist offline   Mit Zitat antworten
Alt 27.12.2007, 10:15  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Das Problem ist einfach zu lösen:
Code:
UPDATE
	tabelle1 t1
set image = (
	SELECT 
		name 
	FROM
		tabelle2 t2
	WHERE t2.id = t1.id)
Wenn Tabelle2 genauso aussieht, wie beschrieben (d.h. sie enthält nur die Id), gibts auch noch andere Möglichkeiten. Z.B.
Code:
DROP TABLE tabelle2;
CREATE TABLE t2 AS
	SELECT id, Image
	FROM tabelle1;
ALTER TABLE tabelle2
	ADD farbe <typ> .....;
oder
Code:
TRUNCATE TABLE tabelle2;
INSERT INTO tabelle2 (id, image)
	SELECT
		id,
		image
	FROM
		tabelle1;
Was allerdings in jedem Fall bleibt, ist die Frage nach dem Sinn des Ganzen. Es entspricht ja nicht unbedingt der Idee von relationalen Datenbanken, Redundanzen zu schaffen. Also wäre eine Referenz auf die erste Tabelle sicher sinnvoller. Oder die Integration eines Farbcodes (FK oder enum) in die erste Tabelle.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 27.12.2007, 14:55  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von lazydog
Das Problem ist einfach zu lösen:
Code:
UPDATE
	tabelle1 t1
set image = (
	SELECT 
		name 
	FROM
		tabelle2 t2
	WHERE t2.id = t1.id)
Komisch, als ich ein ähnliches Konstrukt versucht hatte, hab ich einen Syntax-Error bei der Klammer bekommen und ich verwende eigentlich eine neue MySQL-Version ..
Zergling-new ist offline   Mit Zitat antworten
Alt 27.12.2007, 15:05  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Das geht schon. Was nicht geht, ist ein Zugriff auf die zu Ändernde Tabelle aus dem Subselect, also kein Self-Join. Das ist aber auch bei INSERT nicht möglich.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 27.12.2007, 18:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ach das kanns auch gewesen sein.
Zergling-new 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
Abfrage was er gemacht hat INSERT ... ON DUPLICATE KEY Oetzi Datenbanken 16 16.07.2008 18:36
Self Join / Nested Join ? Ich hab ne Blockade... iangillan Datenbanken 11 06.01.2008 21:37
Pathfinding Algorithmus optimieren? (Algorith. von Dijkstra) Martin13 PHP Tipps 2007 19 04.09.2007 19:20
Verständnisprobleme bei Utf8 > Character Set > Collate erna Datenbanken 4 20.03.2007 14:08
Differenz zwischen 2 Zahlen duderino PHP Tipps 2006 19 10.08.2006 22:12
PRoblem mit Cookie bei PHPbb-Board PHP Tipps 2007 8 12.12.2005 20:56
mysql dump einspielen (ohne phpmyadmin) PHP Tipps 2005-2 6 18.06.2005 21:50
[Erledigt] fehler den ich noch nie gesehen habe Datenbanken 7 09.06.2005 14:29
dynamisches MENÜ aus db lesen.probleme mit SUBid !! PHP Tipps 2005 26 24.03.2005 18:53
[Erledigt] Mysql Abfrage Problem! PHP-Fortgeschrittene 5 27.11.2004 10:22
dem verzweifeln nahe PHP Tipps 2004 26 24.10.2004 17:28
Zeile einfach überspringen bei Unique-Verletzung tapferesschneiderlein Datenbanken 6 03.09.2004 14:29
Select abfrage / Insert stefan-miti PHP Tipps 2004 10 15.08.2004 20:35
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
insert abfrage, insert-abfrage, mehrere inserts mit einer abfrage php, insert erst bei abfrage php

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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.