Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „spezifisches mysql Problem“

P

phreakx

Guest

Hallo,

ich hätte da eine ganz spezifische mysql Frage. Ich habe ( mit Hilfe des Forums und eines Freundes ) eine Programm in php geschrieben mit dem wir die Aufträge unserer Schülerfirma koordinieren. Jeder bekommt ein Account, kann neue Aufträge eingeben, ändern, löschen und übernehmen. Dies ist die wichtigste Funktion. Wenn jemand einen Auftrag übernommen hat verschwindet dieser aus der general Übersicht und wird in eine für jeden user angelegte Tabelle einer mysql Datenbank verschoben.
Wenn jemand den Auftrag abschließt wandert er ins Archiv ( für alle zugänglich ) und in ein anderes nur für den spezifisches user zugägnliches Archiv ( eigene abgeschlossene Aufträge ). Dieses System ist logingeschütz, auch per mysql.

So nun zu meiner Frage ( das oben sollte man gelesen haben weil es für die Frage sehr wichtig ist !! ):

Ich möchte nun für alle noch einmal eine Übersicht machen welche Aufträge sich gerade in Arbeit befinden. Die user authentifizieren sich anhand einer Tabelle mit benutzername und kennwort. So ist es möglich alle benutzernamen auszulesen.
Die eigenen übernommenen aufträge sind in einer tabelle gespeichert die gleichlautent mit dem login namen ist....

Nun wie gebe ich..das programm darf nur mit variablen laufen..sonst geht es schon nicht mehr wenn ein neuer benutzer hinzukommt....alle diese Aufträge in einer Tabelle aus ??

Ich hoffe das war verständlich genug..wenn nicht einfach schreiben ;)

Naja die Schwierigkeit besteht in dem gleichzeitigen auslesen mehrerer Tabellen deren Anzahl nicht bekannt ist..nur die namen..und das vereinigen der gefundenen Datensätze in eine einzige..

Ist das möglich ??
 

Duddle

Posting-Frequenz: 14µHz

Du willst also mit einer Abfrage aus mehreren Tabellen auslesen?

Das kannst du mit sogenannten Joins machen. Wie die funktionieren lässt du dir am besten von erklären.


Duddle
 

saila

Moderatorle

Hi,

ja ist möglich. Nur um das einigermassen verständlich zu erläutern, wären auch die betroffenen Tabellenstrukturen notwendig. Daraus kann man dann (so wie es aussieht) über LEFT JOIN die Daten aus mehreren Tabellen auslesen.
 
P

phreakx

Guest

Hallo,

ok danke für eure Hilfe. Werd mir das mal zu Gemüte führen.
Aber das andere Problem ist, das ich ja nicht die Tabellen die ich auslesen will in den code schreiben kann, da dieses programm ja von mehreren Benutzern benutz wird. So muss ich ja zuerst die Benutzernamen aus der Tabelle mit den Logininformationen in ein array auslesen und dann dieses array irgendwie in so einen left join verstricken.
Wie gesagt Benutzernamen und benutzerspezifische Tabelle sind vom Namen her identisch.

Das ist die Tabellenstruktur der Logintabelle.

Feld Typ Kollation Attribute Null Standard Extra Aktion
Id int(11) Nein auto_increment
Nickname varchar(50) utf8_swedish_ci Nein
Kennwort varchar(50) utf8_swedish_ci Nein
Nachname varchar(50) utf8_swedish_ci Nein

Und das der benutzspezifisches Tabelle

Feld Typ Kollation Attribute Null Standard Extra Aktion
id int(11) Nein
pname varchar(200) utf8_swedish_ci Nein
nachname varchar(200) utf8_swedish_ci Nein
adresse varchar(255) utf8_swedish_ci Nein
usw...da kommen noch relativ viele informationen

Und da muss halt von jedem benutzer diese Tabelle abgeklappert werden...
Ok danke für eure Hilfe..werd das mal in den nächsten Tagen versuchen..mal schaun ob ich das hinbekomme ^^
 

saila

Moderatorle

Du musst nicht die Userlogin-Daten auslesen.

Jeder User der sich einlogt, hat entweder eine Session oder ein Cookie oder das ganze läuft über eine DB. Egal wo - es ist die Userid hinterlegt.

Wichtig ist nicht die User-Tabelle, sondern die Tabelle, welche die Projekte beinhaltet und erst in zweiter Linie die User-Tabelle.
 
P

phreakx

Guest

Doch-denn jeder user hat eine ihm allein gehörende Tabelle. Und es sollen ja alle diese Art Tabellen ausgegeben werden..aslo die Tabellen jedes Benutzers. Und ich brauche ja die Namen dieser Tabellen..und die sind eben gleichlautent mit dem Benutzernamen..

Die Sessions die ich verwende enthalten ja nur den Benutzernamen des Aktuellen Benutzers..ich will aber die Namen aller benutzer !!
 

Duddle

Posting-Frequenz: 14µHz

Dann mach es so:
Schick zuerst eine SQL-Abfrage, die dir alle Benutzer ausgibt, dann nimmst du eine foreach-Schleife in der du pro Benutzer eine SQL-Abfrage schickst und die Tabelle ausgibst.


Duddle
 

saila

Moderatorle

Also mal zusammengefasst und verkürzt:

A:
Es gibt eine Usertabelle? (Frage, um evtl. hier eine Vereinfachung zu erreichen)
und
jeder User hat seine eigene Auftragstabelle.

oder

B:
Jeder User hat eine eigene Usertabelle (was sehr umständlich wäre) und zudem hat jeder User noch eine eigene Auftragstabelle.

Was trifft zu?

Grund der Frage bezieht sich dann auf die Abfrage, um diese so einfach und schnell zu gestalten.

Zudem - hat jeder User eine Session für nach einem Login. Was wird darin gespeichert? User-ID oder was auch immer? Wichtig wäre, wenn B: zutreffend ist, dass eine User-ID in einer Session vorhanden ist. Alleine über diese wäre der query extrem einfach.

Wie lauten die Usertabellen für Aufträge?
 
P

phreakx

Guest

A ist zutreffend !! Ich denke ich werde es so machen wie Duddle es gesagt hat...

ich versuches noch mal darzustellen:

1. Tabelle) Usertabelle für login : Name, Nachname, Passwort usw

2. Tabelle) Jeder user hat eine Tabelle für übernommene Aufträge die genauso heißt wie sein Name.

Also muss ich wie Duddle gesagt hat alle user aus aus der 1. Tabelle lesen (in ein array wahrscheinlich) und dann an die ganzn Tabellen ( die wie gesagt gleichlautend mit dem benutzernamen sind ) ein query machen..und dann alles in einem html Tabelle ausgeben...
 
D

DocUhu

Guest

Verstehe nicht warum jeder User für seine Aufträge eine eigene Tabelle erhält :eek:

Eine Tabelle Aufträge langt doch, die wird dann ggf. um 2 Spalten erweitert: z.B. Userid und Status.

In die Userid erstmal Standard 0 wenn noch keinem User zugewiesen,
Status: 0=Neu, 1=Bearbeitung, 2=Abgeschlossen

Grüße
 
P

phreakx

Guest

Hallo,

Nein eine Tabelle reicht nicht aus...aus guten Gründen. Wenn man betrachtet wie viele Aufträge wir reinbekommen verliert man da die Übersicht..aber mit den Tipps von saila und duddle müsst ich das so hinbekommen wie ich mir das vorstelle...wenn nicht poste ich hier nochmal.

Danke an alle für eure Antworten
 

saila

Moderatorle

Wie DocUhu schon sagt, ist absolut nonsens. Zudem - wenn eine while-Schleife eingesetzt wird, welche ständig auf die DB zugreift um Daten der User zu ziehen ist das extrem Datenbankbelastend.

Es reicht völlig eine Tabelle aus für die Aufträge.

Die Tabelle für die Aufträge könnte z.B. so aussehen:
[php:1:7773fa7e6d]
<?php
// Tabelle der Aufträge die zur Verfügung stehen
CREATE TABLE auftrag (
id int(5) not null default '',
auid int(5) not null default '0',
uid int(5) not null default '0',
bez varchar(255) not null default '',
at text not null default '',
ad date not null default '0000-00-00',
vad date not null default '0000-00-00',
vg date not null default '0000-00-00',
on int(2) not null default ''
) TYPE=MyISAM;

?>
[/php:1:7773fa7e6d]
Kurze Erläuterung zur Tabelle:
id = laufende id mit autoincrement,
auid = User der den Auftrag angelegt hat.
uid = User der den Auftrag übernommen hat
bez = Bezeichnung / Titel des Auftrag
at = Auftragsbeschreibung
ad = Anlagedatum des Auftrags
vad = Datum, wann der Auftrag abgeschlossen/fertiggestellt wurde
vg = Vertragsvergabe - sprich, wann dieser Auftrag angenommen wurde.
on = Prüfziffer 0 oder 1. Sprich Auftrag ist vergeben an uid

Wenn du nun eine Übersicht haben möchtest, welcher User welchen Auftrag hat, kommt folgender Query:
[php:1:7773fa7e6d]
<?php
$con = mysql_query("SELET
id.user_tabelle AS idu,
vorname,
nachname,
id.auftrag AS ida,
uid,
bez,
vg
FROM
auftrag
LEFT JOIN user_tabelle ON (id.user_tabelle = uid)
WHERE
uid = '$user_id'
ORDER BY
vg") or die (mysql_error());
?>
[/php:1:7773fa7e6d]

Die Ausgabeergebnisse sind durch diese eine Tabelle enorm hoch und du hast im Grunde eine sehr einfache datenbankentlastende Abfrage.

Wobei - ich will niemanden aufhalten, es kompliziert zu machen.
 
P

phreakx

Guest

ok danke..

werd mir das mal durch den Kopf gehen lassen..ihr habt schon recht mit der einfachheit..aber ich hab das programm "kompliziert" schon fertig und müsste jetzt alles umwerfen..diese Funktion die ich mir wünsche wäre schon klasse..und ich denke ich werde es kompliziert machen..denn ich werfe jetzt nicht mehr alles um ^^ War so schon relativ viel Arbeit..ok danke euch noch mal...
 

saila

Moderatorle

Naja...... Irgendwann wird die DB eh nicht mehr antworten, weil zu viele Anfragen kommen. Dann macht die dicht. Vor allem dann, wenn man Update und Insert-Querys folgen.

Überleg mal die Datenmenge die du schiebst. Du schreibst ja zu Beginn, das sehr viele User bereits vorhanden sind. DB-Strukturen baut man so einfach als möglich, um eben viele Anfragen unabhängig von der Menge schnell abarbeiten zu können. Für jeden User eine eigene Tabelle.....

Es ist dein Ding.
 
P

phreakx

Guest

Hallo,

ich denke du hast schon recht...wäre klüger gewesen wenn ich das von vornherein anderst aufgenaut hätte..ich habe dieses programm nach ne muster aufgebaut das nicht alzuviele Benutzer verträgt.
Aber wenn ich sehe was ich jetzt alles ändern muss ^^ :eek: :eek: :eek:

Naja danke für den Tipp...muss mal schaun..
 

serotonin

Noch nicht viel geschrieben

Duddle schrieb:
Du willst also mit einer Abfrage aus mehreren Tabellen auslesen?

Das kannst du mit sogenannten Joins machen. Wie die funktionieren lässt du dir am besten von erklären.


Duddle

Mit Union sollte das aber besser klappen:
Code:
select * from tabelle1 union select * from tabelle2

das bedingt natürlich, daß alle Tabellen die selbe Datenstruktur haben.
 
P

phreakx

Guest

Hallo,

Das heißt durch diesen befehl
Code:
select * from tabelle1 union select * from tabelle2
kann ich die Daten die sich in Tabelle 1 und 2 befinden auslesen und asugeben ??
Das ist klasse..ich denke das geht auch mit mehr als 2 tabellen ??
z.B. so ??
Code:
select * from tabelle1 union select ** from tabelle2 union select * from tabelle3
ok danke werd das mal ausprobiren..denk aber das ich duddels variante nehme..denn ich bekomme die namen der Tabellen in einen array...und dann wird diese Abfrage etwas kompliziert oder ??
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.157
Beiträge
2.581.862
Mitglieder
67.223
Neuestes Mitglied
Desiree
Oben