php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.01.2006, 22:33  
Benutzer
 
Registriert seit: 11.01.2006
Beiträge: 74
cyberholic
cyberholic eine Nachricht über Skype™ schicken
Standard array als Schleife verwenden

Moin, mein erster Beitrag *aufgeregt sei*

Ich habe zwei Tabellen. Eine namens USER und eine namens
BUECHER. In Buecher sind folgende Spalten angelegt:

BUCHID - BUCHTITEL
1 - Der sich den Wolf tanzt
2 - Vom Wünde verweht
3 - Hallo Mr. Gott hier spricht Anna
4 - Jamie Olliver - jetzt wirds dreckig!
......

Die Tabelle USER sieht wie folgt aus
USERID - USERNAME - BESITZT
1 - peter - 1,3,4
2 - carlos - 3,4
3 - hans - 1,2


Die Tabelle USER zeigt in der dritten Spalte jetzt also in einem
array an, welche User welches Buch besitzen.
Ueber folgendes query lasse ich mir z.b. fuer den ersten user
seine Buecher anzeigen:

Code:
$resultwerte = mysql_query("SELECT * FROM users where userid='1'");
while($row = mysql_fetch_array($resultwerte)) {
$werte = $row["besitzt"];

echo $werte;
}
Als Ergebnis erscheint dann
Code:
1,3,4
Weiss jetzt jemand von euch, ob man mittels einer FOR schleife
mit den als array ausgegebenen Werten die einzelnen Buchtitel
in einem zweiten QUERY ausgeben kann?

Ich weiss wie man mehrere Zeilen via FOR Schleife anzeigen
laesst, kann mir momentan aber partout nicht vorstellen wie
ich der Schleife sage, das ihre Werte in diesem Fall dann z.b.
das Buch mit der ID 1, das Buch mit der ID 3 und jenes mit der
ID4 sein soll....

Hoffe ich hab das net zu bloed erklaergt
Danke schon mal im Vorraus.

Carlos
cyberholic ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.01.2006, 00:33  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.818
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hallo, und herzlich willkommen... lass dich von den trollen nicht verschrecken ...

zuallererst nachlesen:
http://en.wikipedia.org/wiki/Database_normalization
http://de.wikipedia.org/wiki/Normali...28Datenbank%29

dein feld 'besitzt' verletzt die erste normalform .
das kann man zwar machen, sollte man aber erfahrenen programmierern überlassen, die ganz genau wissen, was sie tun, und warum sie es tun. das ist dann die auf wikipedia genannte non-first normal form.

für anfänger gilt:
1. ermitteln, welche daten man genau braucht
2. sich eine datenbankstruktur überlegen
3. die datenbankstruktur wird so lange überarbeitet, bis sie in die dritte normalform gebracht ist.

diese regeln darf man nur verletzen, wenn man wirklich weiß, was man tut, und das nehme ich von dir jetzt erstmal nicht an.

für dich bedeutet das, dass du die 'besitzt'-relation in eine eigene tabelle packen sollst:
besitzt (user_id,buch_id)

... und um die bücher herauszufinden, die ein user hat:

PHP-Code:
<?php
$qry 
"
SELECT buecher.* 
    FROM buecher
    LEFT JOIN besitzt 
    WHERE besitzt.buch_id = buecher.id
    AND besitzt.user_id = %d 

"
;
$qry sprintf($qry,(int)$userID);
?>
grüße
axo
axo ist offline   Mit Zitat antworten
Alt 12.01.2006, 12:00  
Benutzer
 
Registriert seit: 11.01.2006
Beiträge: 74
cyberholic
cyberholic eine Nachricht über Skype™ schicken
Standard DANKE!

Hey super, vielen Dank!
Ich werde den SELECT Befehl später mal ausprobieren.
Was die DB Struktur angeht, habe ich mir eigentlich Gedanken gemacht,
muss aber eingestehen etwas zu faul gewesen zu sein.

Denn: ich dachte mir, für den Fall das ein User gelöscht wird,
ich dann ergo nur eine Zeile aus der Tabelle USER löschen müsste.
Wenn ich in eine zweite Tabelle die "Besitz-Relevanzen" reinpacken
täte müsste ich dann auch aus dieser zweiten Tabelle den Datensatz
löschen.

Die JOIN Lösung hatte ich mir überlegt, fand das aber bezüglich des
löschens halt etwas umständlich; natürlich auch nur weil mich die
Faulheit geritten hat

Normalerweise halte ich mich auch an die Normalformen, obwohl ich
das Wort zum ersten mal höre. Da ich aber wohlerzogen bin, räume
ich eigentlich immer uff
Siehe z.B. das hier (FLASH-DB Vinyl Archiv GUI)
http://www.cyberholic.de/myvinyl


Vielen Dank für die Hilfe, ich werd dann mal ne zweite Tabelle einrichten.
Beste Grüsse,
Carlos :wink:
cyberholic ist offline   Mit Zitat antworten
Alt 12.01.2006, 12:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo und willkommen,
wenn du faul bist musst du in den Besitz-Relevanzen nichts löschen, solange kein neuer User später die ID eines gelöschten Users bekommt stören die Einträge nicht.
Zergling-new ist offline   Mit Zitat antworten
Alt 12.01.2006, 12:24  
Benutzer
 
Registriert seit: 11.01.2006
Beiträge: 74
cyberholic
cyberholic eine Nachricht über Skype™ schicken
Standard Array vs. Tabelle Performance

Mir stellt sich dabei gerade folgende Frage: was zwingt einen Rechner
eher in die Knie (in Bezug auf die Thread-Eroeffnung)

a) 5 Zeilen in der Tabelle USER mit einer Spalte in der jeweils ca. 200 Werte
als Array definiert sind (nehmen wir an jeder User beitzt 200 Buecher)

oder

b) eine Tabelle in der 1000 Zeilen drin stehen (nach der Lösung von AXO)

Ist das bei der heutigen Rechner-Performance überhaupt noch von
Relevanz? Ich bin halt mit nem 486er mit 8 MB RAM augewachsen
und versuche daher immer so dritt-welt-kompatibel wie nur moeglich
zu denken
cyberholic ist offline   Mit Zitat antworten
Alt 12.01.2006, 12:28  
Benutzer
 
Registriert seit: 11.01.2006
Beiträge: 74
cyberholic
cyberholic eine Nachricht über Skype™ schicken
Standard

@ ZERGLING:

stimmt natürlich, aber im schlimmsten Fall gibt das doch jede Menge
Datenmüll.... Lösung wäre natürlich ein TIMESTAMP für jeden Artikel
um herauszufinden wann dieser das letzte mal abgerufen wurde

---- jetzt werd ich aber wirklich faul

Ich denke AXOs Ansatz ist der richtige, war vor Faulheit nur wirklich zu
blöd und da ich das ganze via ARRAYS lösen wollte um die Ausgabe in
FLASH weiter verarbeiten zu können, auch zu blind.

Ich muss einfach ein DELETE QUERY umsetzen der im Falle das ein User
gelöscht werden soll, dann halt auch aus der BESITZ Tabelle die jeweiligen
Einträge entfernt.
cyberholic ist offline   Mit Zitat antworten
Alt 12.01.2006, 13:14  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Eben
DELETE userTabelle WHERE id = 7 LIMIT 1
DELETE besitztBuecher WHERE userid = 7
Dürfte selbst für faule nicht zu viel 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
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
Ausgabe Array in schleife PHP Tipps 2006 2 01.02.2006 13:49
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array in Schleife füllen PHP Tipps 2005-2 2 05.07.2005 09:06
Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
Array mit while Schleife auslesen PHP Tipps 2004 7 26.06.2004 19:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
array php einlesen schleife, array in for schleife verwenden php, array und datenbankstruktur vergleichen, array mit schleife füllen c

Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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.