• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

3 Tabellen auf einmal abfragen.

Status
Für weitere Antworten geschlossen.

Prophet

Super-Moderator
Moderator
Geht es das ich die Daten aus drei Tabellen zugleich abfrage?

Ich stelle mir das so vor:
Code:
SELECT *, *, * FROM `thread`, `board`, `categorie` WHERE `thread`->`id`='0' AND `board`->`id`='0' AND `categorie`->`id`='0';

Wenn sowas möglich ist würde ich mich auch freuen wenn ihr mir erklärt wie ich das ganze aus mysql_fetch_array() herausbekomme bzw. wie es im array abgelgt ist...
 
mein befehl sollte ja auch nur mein vorhaben verdeutlichen. ich frage ja ob man sowas überhaupt machen kann und wenn wie?
 
ja war mir schon klar, aber ich glaub nicht, dass es einen befehl gibt, mit dem aus mehreren dbs auswählen kann... bzw tabellen...
 
öm lese doch aus einen tabelle und pack alles in n array dann les aus der nächsten und packs wieder in array usw.
 
ich will beim abfragen der db zeit sparen. deshalb will ich nicht 3 getrennte anfragen senden sondern eine einzige...
 
Naja ob du da 0.3 sek längerwartest oder nicht ist doch eig egal oder.
Aber wenn du 3 in 1 haben willst kann ich dir leider net helfen!
 
Ich habe eine möglichkeit gefunden alle drei zu kombinieren... mit UNION das problem ist dauert dreimal so lange wie drei einzelne abfragen...

ich teste deine mal fätzminator...

EDIT: Funktioniert nicht...
 
kommt drauf an wie du das meinst. also in thread sind id von board gespeichert damit ich weiß wohin der thread gehört. gleiches gilt für board und categorie. ind post sind schlüssel für thread und board gespeichert... aber halt immer nur als numerischer wert der für den primärschlüssel der anderen tabellen steht...
 
ok, dann sollte es kein problem sein.

du müsstest mir nur die drei tabellen posten und die verbindung die sie haben.
 
Code:
CREATE TABLE `posts` (
		`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
		`author` INT UNSIGNED DEFAULT '0' NOT NULL,
		`title` VARCHAR(100) DEFAULT'' NOT NULL,
		`message` TEXT DEFAULT'' NOT NULL,
		`date_create` DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL,
		`date_edit` DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL,
		`count_edit` INT UNSIGNED DEFAULT '0' NOT NULL,
		`thread` INT UNSIGNED DEFAULT '0' NOT NULL,
		`board` INT UNSIGNED DEFAULT '0' NOT NULL,
		`flags` VARCHAR(3) DEFAULT'111' NOT NULL,

		PRIMARY KEY (`id`)
		);
# thread und board geben den primär 
# schlüssel der entsprechenden verbindung an

CREATE TABLE `threads` (
		`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
		`author` INT UNSIGNED DEFAULT '0' NOT NULL,
		`title` VARCHAR(100) DEFAULT'' NOT NULL,
		`date_create` DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL,
		`date_reply` DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL,
		`posts` INT UNSIGNED DEFAULT '0' NOT NULL,
		`board` INT UNSIGNED DEFAULT '0' NOT NULL,

		PRIMARY KEY (`id`)
		);
# hier ist es board

CREATE TABLE `boards` (
		`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
		`title` VARCHAR(100) DEFAULT '' NOT NULL,
		`description` VARCHAR(255) DEFAULT '' NOT NULL,
		`count_threads` INT UNSIGNED DEFAULT '0' NOT NULL,
		`count_posts` INT UNSIGNED DEFAULT '0' NOT NULL,
		`change_date` DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL,
		`change_author` INT UNSIGNED DEFAULT '0' NOT NULL,
		`change_thread` INT UNSIGNED DEFAULT '0' NOT NULL,
		`categorie` INT UNSIGNED DEFAULT '0' NOT NULL,
		`ordinal` INT UNSIGNED DEFAULT '0' NOT NULL,

		PRIMARY KEY (`id`)
		);
# hier categorie

CREATE TABLE `categories`
	(
		`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
		`title` VARCHAR(100) NOT NULL,
		`ordinal` INT UNSIGNED DEFAULT '0' NOT NULL,

		PRIMARY KEY (`id`)
	);
 
also eigentlich sollte meine version funktionieren...
ich hab mal o was ähnliches gebracuht, finde den code leider gerade nicht mehr...

mfg, fätzminator

EDIT:
finde nur gerade ne join abfrage...:
[php:1:8ed2973fa1]<?php
$query = "SELECT taskname, pid, Avg(vote) AS avg FROM vote INNER JOIN users ON pid = uid GROUP BY uid ORDER BY avg DESC";
$result = mysql_query($query);
?>[/php:1:8ed2973fa1]
 
schlussendlich ist das wichtig für dich:
FROM vote INNER JOIN users ON pid = uid GROUP BY uid

hier nehme ich einfach alle (also nur taskname, pid, und den durchschnitt von vote) einträge von den tabellen vote und und users und verbinde sie miteinander, so dass pid mit uid der anderen tabelle verglichen wird und diese einträge verknüpft werden! diese werde gezählt und als durchschnitt ausgegeben (eben ich muss bei einem join nach irgendwass gruppieren... und ich nehme den durchschnitt aller mit der gleichen pid das voteergebnis; dann gibt es noch 1 mal die pid 1, 1 mal die pid 2 usw)

anmerkung: wenn du in mehreren tabellen gleiche namen hast, musst du die einzelnen spalten mit tabellenname. definieren, also zb vote.pid und users.uid
 
INNER JOIN users ON pid = uid

heißt:

wenn pid = uid dann nehme auch noch ein reihe von users mit ins ergebnis?
 
ins ergebnis nehme ich ja alles, was ich nach SELECT angebe... wenn du "*" angibst, werden einfach alle zeilen zurückgegeben, aber ich kann natürlich auch nur die zurückgeben, die ich verwende...

also bekomme ich immer den taskname, die id dieses taskes und den durchschnitt von dem,für das gevotet wure...
diesen join musste ich eben machen, weil ich zwar eine ganze liste von votes hatte (in der tabelle vote), bei der ich dann 1 --> 4.5, 2 --> note x, 3 ... usw ausgeben könnte, allerdings wollte ich den namen ausgeben, und der befindet sich ja in einer andere tabelle mit der jeweiligen id...
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben