Forum Doku Wiki Blog

Forumsarchiv 2004, Dezember
für mich z.Z. zu komplizierte Abfrage

archivierte Beiträge lesen

  1. (DATENBANK) für mich z.Z. zu komplizierte Abfrage von Twilo, 12. 12. 2004, 23:16

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 12. 12. 2004, 23:16 Uhr von Twilo veröffentlicht.

Hallo,

meine Datenbank

Tabelle1     Tabelle2
+------------+------------+
| _id        | _id        |
| _parent_id | _user_id   |
| ...        | ...        |
+------------+------------+

ich brauche eine Datenbankabfrage in MySQL

ich habe/bekomme "_parent_id" damit muss ich aus Tabelle1 die _id's Abfragen, wo _parent_id = der übergeben id ist
danach muss/brauch ich dann aus der Tabelle2 die ganzen Datensätze, wo die _user_id mit den _id's aus der Tabelle1 übereinstimmen

ist das überhaupt möglich?


mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 12. 12. 2004, 23:27 Uhr von ichen veröffentlicht.

Moin!

> Tabelle1     Tabelle2
> +------------+------------+
> | _id        | _id        |
> | _parent_id | _user_id   |
> | ...        | ...        |
> +------------+------------+

> ich habe/bekomme "_parent_id" damit muss ich aus Tabelle1 die _id's Abfragen, wo _parent_id = der übergeben id ist
> danach muss/brauch ich dann aus der Tabelle2 die ganzen Datensätze, wo die _user_id mit den _id's aus der Tabelle1 übereinstimmen

$sql = "select b._user_id from tabelle1 a, tabelle2 b where a._parent_id = $uebergabe AND b._id = a._id";

Lese dazu noch:http://dev.mysql.com/doc/mysql/de/JOIN.html

tschüssi
ichen

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 12. 12. 2004, 23:48 Uhr von Twilo veröffentlicht.

Hallo,

> > Tabelle1     Tabelle2
> > +------------+------------+
> > | _id        | _id        |
> > | _parent_id | _user_id   |
> > | ...        | ...        |
> > +------------+------------+
>
> > ich habe/bekomme "_parent_id" damit muss ich aus Tabelle1 die _id's Abfragen, wo _parent_id = der übergeben id ist
> > danach muss/brauch ich dann aus der Tabelle2 die ganzen Datensätze, wo die _user_id mit den _id's aus der Tabelle1 übereinstimmen
>
> $sql = "select b._user_id from tabelle1 a, tabelle2 b where a._parent_id = $uebergabe AND b._id = a._id";
>
> Lese dazu noch:http://dev.mysql.com/doc/mysql/de/JOIN.html

das kann die Lösung nicht sein, ich bekomme viel zu wenig Datensätze


Tabelle1                      Tabelle2
_id   _parent_id              _id   _user_id
1     1                       1     9
6     1                       2     6
7     1                       3     1
8     7                       4     1
9     6                       5     1
10    1                       6     1
11    1                       7     1
12    1                       8     1
13    1                       9     1
                              10    1
                              11    6

wenn ich jetzt als _parent_id 1 angebe, muss ich aus Tabelle2 alle Datensätze bekommen
gebe ich aber als _parent_id 6 an, darf ich aus der Tabelle2 nur den Datenatz 1 bekommen
wenn ich 7 angebe, darf kein Datenatz zurückgegeben werden

mfg
Twilo

Nachtrag: für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 12. 12. 2004, 23:50 Uhr von Twilo veröffentlicht.

Hallo,

Datensatz 2 und 11 müssen bei _parent_id 6 auch ausgegeben werden

mfg
Twilo

Nachtrag: für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 13. 12. 2004, 09:51 Uhr von ich veröffentlicht.


Du weißt schon, was Du willst... Oder?

Hast Du evtl. parent_id und user_id verwechselt?

Nachtrag: für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 13. 12. 2004, 13:16 Uhr von Twilo veröffentlicht.

Hallo,

> Du weißt schon, was Du willst... Oder?
ja ;-)

> Hast Du evtl. parent_id und user_id verwechselt?

wenn parent_id übergeben wird, würde ja eigentlich nur der Datensatz 9 aus Tabelle2 kommen
aber der User 6 hat auch 2 Beiträge erstellt, die sollen natürlich auch ausgegeben werden

mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 13. 12. 2004, 11:46 Uhr von Ilja veröffentlicht.

yo,

> $sql = "select b._user_id from tabelle1 a, tabelle2 b where a._parent_id = $uebergabe AND b._id = a._id";

select a._id, b._user_id
from tabelle1 a, tabelle2 b
where a._parent_id = $uebergabe
AND b._user_id = a._id";

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 13. 12. 2004, 15:57 Uhr von Twilo veröffentlicht.

Hallo,

> select a._id, b._user_id
> from tabelle1 a, tabelle2 b
> where a._parent_id = $uebergabe
> AND b._user_id = a._id";

das sieht schon super aus
hab es etwas abgeändert

select b._id, b._user_id
from tabelle1 a, tabelle2 b
where a._parent_id = 6
AND b._user_id = a._id

dann gibt er alle aus, wo _parent_id = 6 ist
also Datensatz 9

ich bräuchte aber noch Datensatz 2 und 11
http://forum.de.selfhtml.org/?t=96456&m=586738


dann hab ich es so probiert

select b._id, b._user_id
from tabelle1 a, tabelle2 b
where (a._parent_id = $uebergabe
AND b._user_id = a._id) OR b._user_id = 6

nur, was er mir da ausgibt, ist totaler Mist
insgesammt 37 Datensätze
es dürfen eigentlich nur 3 sein

sieht ganz nach einer Kreuzverbindung aus...

mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 13. 12. 2004, 16:12 Uhr von Ilja veröffentlicht.

yo,

meiner meinung nach widersprichst du dir in deinen aussagen.

1) ich habe/bekomme "_parent_id" damit muss ich aus Tabelle1 die _id's Abfragen, wo _parent_id = der übergeben id ist
danach muss/brauch ich dann aus der Tabelle2 die ganzen Datensätze, wo die _user_id mit den _id's aus der Tabelle1 übereinstimmen

genau das sollte die abfrage liefern, die ich dir gegeben habe.

2) ich bräuchte aber noch Datensatz 2 und 11

und das widerspricht deinem ersten wunsch. dieser 2. und 11. datensatz weißt auf den ---> user <--- 6 und nicht auf die user, die als parent_id 6 haben.

zum anderen hast du innerhalb der ersten tabelle eine rekursion, die man nach möglichkeit vermeiden sollte.

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 13. 12. 2004, 17:24 Uhr von Twilo veröffentlicht.

Hallo,

> meiner meinung nach widersprichst du dir in deinen aussagen.

> 1) ich habe/bekomme "_parent_id" damit muss ich aus Tabelle1 die _id's Abfragen, wo _parent_id = der übergeben id ist
> danach muss/brauch ich dann aus der Tabelle2 die ganzen Datensätze, wo die _user_id mit den _id's aus der Tabelle1 übereinstimmen

in der Abfrage sollen beide Varianten berücksichtigt werden


> genau das sollte die abfrage liefern, die ich dir gegeben habe.

ja, ich bekomme den Datensatz 9, brauche aber dazu noch den Dytensatz 2 und 11

den Datensatz 9 hat ein User vom User 6 erstellt
Datensatz 2 und 11 hat der User 6 erstellt


> 2) ich bräuchte aber noch Datensatz 2 und 11

> und das widerspricht deinem ersten wunsch. dieser 2. und 11. datensatz weißt auf den ---> user <--- 6 und nicht auf die user, die als parent_id 6 haben.

mit der Abfrage sollen alle Datensätze abgerufen werden, die ihm gehören bzw. einen User von Ihm gehört


> zum anderen hast du innerhalb der ersten tabelle eine rekursion, die man nach möglichkeit vermeiden sollte.

wie meinst du das?
die erste Tabelle enthält die User
_parent_id gibt an, welcher User diesen User erstellt hat

wie kann ich das denn anders lösen?

mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 13. 12. 2004, 18:01 Uhr von Ilja veröffentlicht.

yo,

> ja, ich bekomme den Datensatz 9, brauche aber dazu noch den Dytensatz 2 und 11

gut, das war aus deinem ursprungsposting nicht ganz klar hervorgegangen.

> die erste Tabelle enthält die User
> _parent_id gibt an, welcher User diesen User erstellt hat

genau das nennt man eine rekursion.

ich werde mich noch mal einen anderen tag melden, gehe nun ins kino, freundin ist hier und wir sehen einen typischen frauenfilm.....

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 13. 12. 2004, 18:38 Uhr von Twilo veröffentlicht.

Hallo,

> > ja, ich bekomme den Datensatz 9, brauche aber dazu noch den Dytensatz 2 und 11

> gut, das war aus deinem ursprungsposting nicht ganz klar hervorgegangen.

ich hab mich dort etwas unklar ausgedrückt :-(


> > die erste Tabelle enthält die User
> > _parent_id gibt an, welcher User diesen User erstellt hat

> genau das nennt man eine rekursion.

> ich werde mich noch mal einen anderen tag melden,

hier über's Forum, oder per eMail?


> gehe nun ins kino, freundin ist hier und wir sehen einen typischen frauenfilm.....

dann mal viel spass :-P


mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 14. 12. 2004, 09:53 Uhr von Ilja veröffentlicht.

yo,

du hast bei deinem ersten versuch die klammern falsch gesetzt, AND bindet stärker als OR.

select b._id, b._user_id
from tabelle1 a, tabelle2 b
where (a._parent_id = 6 OR a._id= 6)
AND b._user_id = a._id

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 14. 12. 2004, 19:59 Uhr von Twilo veröffentlicht.

Hallo,

> du hast bei deinem ersten versuch die klammern falsch gesetzt, AND bindet stärker als OR.
>
> select b._id, b._user_id
> from tabelle1 a, tabelle2 b
> where (a._parent_id = 6 OR a._id= 6)
> AND b._user_id = a._id

das klappt so weit, hat aber noch einen kleinen Schönheitsfehler

z.B. User 9 hat ein Beitrag erstellt
diese Beiträge werden zur Zeit nicht angezeigt.

User 9 gehört nicht zu User 6 sondern zu User 8
User 8 gehört aber zu User 6

User 9 soll auch angezeigt werden

das meintest du sicherlich mit Rekursiv, oder?
wie kann man das am besten lösen?

mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 15. 12. 2004, 08:40 Uhr von Ilja veröffentlicht.

yo,

> das meintest du sicherlich mit Rekursiv, oder?

ja, das ist rekursiv und insofern wird auch die abfrage rekursiv sein müssen. frage mich nur, warum du das nicht gleich erwähnt hast.

> wie kann man das am besten lösen?

wenn es möglich ist, das daten-design so ändern, dass keine rekursion mehr vorhanden ist.

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 16. 12. 2004, 00:51 Uhr von Twilo veröffentlicht.

Hallo,

> > wie kann man das am besten lösen?

> wenn es möglich ist, das daten-design so ändern, dass keine rekursion mehr vorhanden ist.

ich frage mich gerade, wie ich das anstellen soll ;-)

User1
  |
  +-- User2
  |
  +-- User3
  |     |
  |     +-- User8
  |     |     |
  |     |     + User12
  |     |
  |     +-- User9
  |     |
  |     +-- ....
  |
  +-- User15
  |     |

etc.

also User1 hat User2, User3, User15, etc. erstellt
diese User können auch User erstellen

wie würdest du das Datenbank Design machen?


mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 16. 12. 2004, 09:14 Uhr von Ilja veröffentlicht.

yo,

> ich frage mich gerade, wie ich das anstellen soll ;-)

gute frage und bei rekursionen tue ich mich auch immer schwer. aber mein vorschläg wäre, welcher User welchen User erstellt hat in eine extra tabelle auszugliedern. dann hättest du deine normale User tabelle, in der die spalte mit den "überuser" wegfällt plus einer neuen tabellen, in der du zwei spalten hast, die zusammen einen PK bilden.

tabelle 2:

User | wurde_erstelt_von_User

dann sollte eigentlich die rekursion draussen sein und auch die abfrage besser zu bewerkstelligen sein.

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 16. 12. 2004, 22:23 Uhr von Twilo veröffentlicht.

Hallo,

> [...]
> dann hättest du deine normale User tabelle, in der die spalte mit den "überuser" wegfällt plus einer neuen tabellen, in der du zwei spalten hast, die zusammen einen PK bilden.

was ist ein PK?


> tabelle 2:

> User | wurde_erstelt_von_User

> dann sollte eigentlich die rekursion draussen sein und auch die abfrage besser zu bewerkstelligen sein.

die Rekursion besteht dann aber immer noch, oder?
denn ich würde diese eine Spalte ja nur ein eine neue Tabelle packen

oder hab ich ein Denkfehler?

mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 17. 12. 2004, 13:56 Uhr von Ilja veröffentlicht.

yo,

> was ist ein PK?

primary key, bzw. primärschlüssel.

> die Rekursion besteht dann aber immer noch, oder?

direkte rekursion in einer tabelle wäre, dass zwei spalten in unterschiedlichen zeilen voneinander abhängig sind. beispiel, der datensatz eines user in deinem daten-design hat einen verweis auf seinen ersteller. und dieser ersteller steht in einem anderen datensatz der gleichen tabelle. wenn du alles in eine zweite tabelle auslagerst, sollte die rekursion eigentlich nicht mehr vorhanden sein. aber wie gesagt, bei rekursionen tue ich mich auch immer schwer.

> denn ich würde diese eine Spalte ja nur ein eine neue Tabelle packen

diese eine spalte plus eine weitere mit den user_id.

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 17. 12. 2004, 17:27 Uhr von Twilo veröffentlicht.

Hallo,

> direkte rekursion in einer tabelle wäre, dass zwei spalten in unterschiedlichen zeilen voneinander abhängig sind. beispiel, der datensatz eines user in deinem daten-design hat einen verweis auf seinen ersteller. und dieser ersteller steht in einem anderen datensatz der gleichen tabelle. wenn du alles in eine zweite tabelle auslagerst, sollte die rekursion eigentlich nicht mehr vorhanden sein. aber wie gesagt, bei rekursionen tue ich mich auch immer schwer.

hm...
diese Zusätzliche Tabelle würde doch so aussehen, oder?

+----------+------------+
| _user_id | _parent_id |
+----------+------------+
|    1     |     1      |
|    6     |     1      |
|    7     |     1      |
|    8     |     7      |
|    9     |     6      |
|    10    |     1      |
|    11    |     1      |
|    12    |     1      |
|    13    |     1      |
+----------+------------+

aber genauso sieht doch auch die andere Tabelle aus
irgendwie versteh ich das nicht :-(

mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 17. 12. 2004, 18:23 Uhr von Ilja veröffentlicht.

yo,

> diese Zusätzliche Tabelle würde doch so aussehen, oder?

ja, genau so.

> aber genauso sieht doch auch die andere Tabelle aus
> irgendwie versteh ich das nicht :-(

nicht ganz, die rekursion ist nun hoffentlich draussen, da user und ersteller voneinander getrennt sind. die abhängigkeiten befinden sich nun in zwei tabellen.

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 17. 12. 2004, 23:24 Uhr von Twilo veröffentlicht.

Hallo,

> > diese Zusätzliche Tabelle würde doch so aussehen, oder?
>
> ja, genau so.
>
> > aber genauso sieht doch auch die andere Tabelle aus
> > irgendwie versteh ich das nicht :-(
>
> nicht ganz, die rekursion ist nun hoffentlich draussen, da user und ersteller voneinander getrennt sind. die abhängigkeiten befinden sich nun in zwei tabellen.

die Rekursion ist dann aber nicht aus der Welt geschaft, sondern nur in eine andere Tabelle ausgelagert *g*

der Inhalt aus der extra Tabelle, wurde 1:1 aus der anderen übernommen

hm...

mfg
Twilo

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 18. 12. 2004, 18:10 Uhr von Ilja veröffentlicht.

yo,

> die Rekursion ist dann aber nicht aus der Welt geschaft, sondern nur in eine andere Tabelle ausgelagert *g*

die direkte rekursion ist es allemal, den diese ist immer nur innhalb einer tabelle. die frage ist, ob eine indirekte rekursion vorliegt. und auch das sollte nicht mehr der fall sein.

Ilja

für mich z.Z. zu komplizierte Abfrage

Der folgende Beitrag wurde am 18. 12. 2004, 20:58 Uhr von Twilo veröffentlicht.

Hallo,

> > die Rekursion ist dann aber nicht aus der Welt geschaft, sondern nur in eine andere Tabelle ausgelagert *g*

> die direkte rekursion ist es allemal, den diese ist immer nur innhalb einer tabelle. die frage ist, ob eine indirekte rekursion vorliegt. und auch das sollte nicht mehr der fall sein.

doch die liegt imemr noch vor :)

ich werde mal bei Zeiten etwas googlen, vielleicht find ich ja etwas, wie man das am besten lösen kann

mfg
Twilo

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4