SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 30.11.2002, 08:20:16
Silencer Silencer ist offline
Anfänger
 
Registriert seit: Sep 2002
Beiträge: 118
mysql tabellen verbinden?

ich habe ein newssystem (ich weiß ich nerve *g*)
beim posten, werden in die mysql tabelle "news"
folgende daten geschrieben

name
email
topic
url
urlname
message
date
kategorie


nun was jetzt doof ist, wenn ich den username ändere von einem
dann muß ich das per hand in allen newsbeiträgen machen, was oft sehr viele sind

die usertabelle sieht so aus

name
email
passwort
zugriffsrechte
namenimage

wie kann ich das machen, das die newsseite so generiert wird, das er den namen und die email adressen von den news aus der user tabelle liest?

ähnlich wie bei foren, dort werden ja auch die daten des users aus der usertabelle gelesen, falls sich daten im profil geändert haben zb name oder email

was muß ich an meinen tabellen ändern bzw hinzufügen und wie muß die mysql abfrage dann aussehen?

im moment sieht der query so aus

$result=mysql_query("select name, topic, url, urlname, email, date_format(date, '%d.%m.%Y - %T') as date, message from news where kategorie=1 order by id desc limit 15");
Mit Zitat antworten
  #2  
Alt 30.11.2002, 11:16:35
Benutzerbild von Matt
Matt Matt ist offline
Member
 
Registriert seit: Mar 2002
Ort: Port 80, localhost-city, 127/0/0/1
Beiträge: 878
Hi!

Tabelle "User":

USER_ID
username
passwort
email


Tabelle "newssystem":

NEWS_ID
titel
content
user_ID
created


abfrage: select newssystem.titel, newssystem.content, newssystem.created, user.username, user.email from newssystem left join users on newssystem.user_ID=user.USER_ID

das müsste dann eigentlich funktionieren. Damit nimmt er automatisch Uername und E-mail aus der User tabelle, wobei du sicher stellen musst, dass sich USER_ID aus der tabelle User nicht ändert. leg sie als primär schlüssel mit den argumenten not null und auto_increment fest.

hoffe geholfen zu haben ;=)
Mit Zitat antworten
  #3  
Alt 30.11.2002, 12:22:48
Silencer Silencer ist offline
Anfänger
 
Registriert seit: Sep 2002
Beiträge: 118
kannst du mir bitte deine abfrage im detail erklären? also was die einzelnen dinge bedeuten

denn wenn es funktioniert dann habe ich es trotzdem noch nicht kapiert.
ich würde es aber gern kapieren, damit ich es in zukunft auch nutzen kann

danke
Mit Zitat antworten
  #4  
Alt 30.11.2002, 12:39:36
Benutzerbild von Matt
Matt Matt ist offline
Member
 
Registriert seit: Mar 2002
Ort: Port 80, localhost-city, 127/0/0/1
Beiträge: 878
hi
also:

left join verbindet zwei tabellen und macht sie zu einer virtuellen gemeinsamen tabelle. das on blabla=blabla sagt aus, über was die beiden Tabellen miteinander verbunden gehören. In dem fall ist es so, dass tabelle newssystem die User ID eines Users gespeichert hat. mit left join user on newssystem.user_ID=user.USER_ID sage ich ihm, dass das zusammengehört, wo die user_ID aus newssystem gleich ist, wie die USER_ID aus user.

ich schreibe beispielsweise newssystem.user_ID damit mySQL weiss, aus welcher ursprünglichen Tabelle die Spalte kommt, die ich haben will, weil es könnte ja auch sein, dass in beiden tabellen eine gleichnamige Spalte vorkommt (und das tut es ja auch mit USER_ID bzw. user_ID)

die ganze query nochmal

select newssystem.titel, newssystem.content, newssystem.created, user.username, user.email from newssystem left join user on newssystem.user_ID=user.USER_ID

sagt also aus: Nimm die Tabelle newssystem und verbinde sie mit der tabelle user (left join user nicht users ich hab mich in meinem ersten beitrag verschrieben!) und zwar so, dass zu jedem eintrag aus der tabelle newssystem Eintrag aus der Tabelle user gehört, bei dem das Feld USER_ID gleich ist, wie das Feld user_ID aus der anderen tabelle. Dann gib mir die felder:
aus der ehemaligen newssystem tabelle das feld titel, content und created und aus der ehemaligen user tabelle das feld username und email.

left join sagt aus, dass das die ursprüngliche tabelle (also in diesem fall newssystem -> "From newssystem") auf der Linken seite der gesamttabelle steht. Das macht einen riesen unterschied, weil wenn sie nämlich auf der rechten stehen würde -> "right join" hättest du die auflistung aller benutzernamen mit e-mail adresse und einen, dazu passenden news eintrag. und das wäre nicht sehr effektiv...

mehr über mySQL findest du unter www.little-idiot.de/mysql/
über joins im allgemeinen: http://www.little-idiot.de/mysql/mysql-52.html

wenn du noch fragen hast, stell sie einfach ;)
Mit Zitat antworten
  #5  
Alt 30.11.2002, 14:30:54
Silencer Silencer ist offline
Anfänger
 
Registriert seit: Sep 2002
Beiträge: 118
funktioniert die ausgabe auf der newsseite dann auch mit

mysql_fetch_object?


wie frage ich bei object dann den usernamen ab?

auch mit

object->username ?

und beim posten, muß ich dann nicht den usernamen in der tabelle speichern wo die news drin stehen sondern dann als ersatz die user id und die email adresse, bzw die spalte in den news, kann ich die dann auch löschen?

kann ich dann auch aus der usertabelle in den news die spalte "newsimage" abrufen mit

object->userimage?


das userimage ist eine art avatar das wenn es vorhanden ist benutzt wird anstatt des usernamens
Mit Zitat antworten
  #6  
Alt 30.11.2002, 17:11:04
Benutzerbild von Matt
Matt Matt ist offline
Member
 
Registriert seit: Mar 2002
Ort: Port 80, localhost-city, 127/0/0/1
Beiträge: 878
die felder kriegst du mit mysql_fetch_object ganz normal, in die tabelle newssystem speicherst du nur die USER_ID eines benutzers. Das ganze ändert sich dann automatisch, sobald du in der tabelle user etwas änderst. Du kannst alles abrufen, wenn du es in der query angibst.
also füg in die Abfrage noch "user.userimage" hinzu und schon kriegst du auch den. Dann musst du in PHP halt noch schauen, ob ein Avatar da ist, wenn nicht, gibst du usernamen aus, wenn schon, dann Avatar.
Mit Zitat antworten
  #7  
Alt 24.03.2009, 13:59:29
Blackmore Blackmore ist offline
Anfänger
 
Registriert seit: Mar 2009
Alter: 47
Beiträge: 1
AW: mysql tabellen verbinden?

HI,

super beschrieben, aber ich habe das Problem, das ich 3 Tabellen miteinander verbinden muss...

ich bekomme über die Session den Usernamen, der ist fest...

Tabelle 1: (cityruf_user)
ID
user nummer

Tabelle 2: (cityruf_abos)
ID
nummer (identisch mit Tabelle1.nummer, mehrmals möglich)
abo
etc...

Tabelle 3: (cityruf_provider)
ID
prov_id (identisch mit tabelle2.abo)
name (Langtext von prov_id / Tabelle2.abo)


folgende Abfrage bringt mir aber alle Daten der Tabelle cityruf_abos, mit Langtext von cityruf_abos => citiruf.provider.name...

$abfrage = "
SELECT
cityruf_provider.id,
cityruf_provider.prov_id,
cityruf_provider.name,
cityruf_abos.nummer,
cityruf_abos.abo,
cityruf_abos.gesendet_gesamt,
cityruf_abos.gesendet_heute,
cityruf_abos.acti,
cityruf_abos.senden_max
FROM
cityruf_provider
LEFT JOIN
cityruf_abos
ON
cityruf_provider.prov_id = cityruf_abos.abo
ORDER BY
`id`
ASC" ;

wie bekomm ich es jetzt hin, das ich nur die Daten des Users (cityruf_user.user => cityruf_user.nummer => cityruf_abos.nummer) erhalte???

ich steh da komplett auf dem schlauch... grmml


Gruß Blacky



::EDIT::

habs gefunden:

$abfrage = "
SELECT
cityruf_provider.prov_id,
cityruf_provider.name,
cityruf_abos.nummer,
cityruf_abos.abo,
cityruf_abos.gesendet_gesamt,
cityruf_abos.gesendet_heute,
cityruf_abos.senden_max,
cityruf_abos.acti,
cityruf_user.`user`,
cityruf_user.nummer
FROM
cityruf_provider
Inner Join cityruf_abos ON cityruf_abos.abo = cityruf_provider.prov_id
Inner Join cityruf_user ON cityruf_abos.nummer = cityruf_user.nummer
WHERE
cityruf_user.user = '" . $_SESSION['USERNAME'] . "'
ORDER BY
cityruf_provider.prov_id ASC ;" ;

Diese Abfrage bringt mir aber NUR Daten, bei dennen cityruf_abos.abo, und cityruf_provider.prov_id vorhanden sind... aber ich brauche von cityruf_provider.prov_id alle Daten - und was nicht in abos drinne steht, soll mit NULL ersetzt werden...

Geändert von Blackmore (24.03.2009 um 15:19:12 Uhr) Grund: doch nicht erledigt...
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:45:14 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt