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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
30.11.2002, 07:20:16
|
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");
|
30.11.2002, 10:16:35
|
|
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 ;=)
|
30.11.2002, 11:22:48
|
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
|
30.11.2002, 11:39:36
|
|
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 ;)
|
30.11.2002, 13:30:54
|
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
|
30.11.2002, 16:11:04
|
|
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.
|
24.03.2009, 12:59:29
|
Anfänger
|
|
Registriert seit: Mar 2009
Alter: 48
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 14:19:12 Uhr)
Grund: doch nicht erledigt...
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:13:48 Uhr.
|