Neue Zeile bauen?

Neue Zeile bauen?

am 27.01.2008 02:19:06 von namor

Hallo,

wie mache ich aus 2 Tabellen eine Ausgabe (Zeile)?

Beispiel:

Tabelle A

PK, TEXT
1, xyz

Ist zu verbinden mit

Tabelle B
FK, SATZART, SATZINHALT
1, Typ A, 123
1, Typ B, 456

FK ist PK aus Tabelle A

Im Ergebnis soll es so aussehen

PK, SATZART=3DTypA, SATZART=3DTyp B
1, xyz, 123, 456

Ich hoffe dass es einigermaßen verständlich ist.

Re: Neue Zeile bauen?

am 27.01.2008 10:01:11 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Neue Zeile bauen?

am 28.01.2008 12:05:24 von namor

On 27 Jan., 10:01, Andreas Kretschmer
wrote:
> begin namor wrote:
> > Tabelle A
> > PK, TEXT
> > 1, xyz
> > Ist zu verbinden mit
> > Tabelle B
> > FK, SATZART, SATZINHALT
> > 1, Typ A, 123
> > 1, Typ B, 456
> > FK ist PK aus Tabelle A
> > Im Ergebnis soll es so aussehen
> > PK, SATZART=3DTypA, SATZART=3DTyp B
> > 1, xyz, 123, 456
>
> test=3D# create table ta(pk int, txt text);
> CREATE TABLE
> test=3D*# create table tb(fk int, satzart text, inhalt int);
> CREATE TABLE
> test=3D*# copy ta from stdin;
> Enter data to be copied followed by a newline.
> End with a backslash and a period on a line by itself.>> 1 xyz
> >> \.
>
> test=3D*# copy tb from stdin;
> Enter data to be copied followed by a newline.
> End with a backslash and a period on a line by itself.
>
> >> 1 typ a 123
> >> 1 typ b 456
> >> \.
>
> test=3D# select a.pk, a.txt, sum(case when b.satzart=3D'typ a' then inhalt=

> else 0 end) as satzart_typ_a, sum(case when b.satzart=3D'typ b' then
> inhalt else 0 end) as satzart_typ_b from ta a left join tb b on
> (a.pk=3Db.fk) group by a.pk, a.txt;
> pk | txt | satzart_typ_a | satzart_typ_b
> ----+-----+---------------+---------------
> 1 | xyz | 123 | 456
> (1 row)
>
> end
> Andreas
> --
> q: why do so many people take an instant dislike to mysql?
> a: it saves time (oicu in #postgresql)
> Explaining the concept of referential integrity to a mysql user is like
> explaining condoms to a catholic (Shadda in #postgresql)

Herzlichen Dank,

das ganze sieht jetzt so aus bei mir:

SELECT cats.joborder.`joborder_id`, cats.joborder.`title`,
cats.joborder.`state`, cats.joborder.`city`, cats.joborder.`type`,
SUM(CASE WHEN cats.extra_field.`field_name`=3D'Referenz' THEN
cats.extra_field.`value` ELSE 0 END)
AS Referenz, SUM(CASE WHEN cats.extra_field.`field_name`=3D'Beginn-
Dauer' THEN cats.extra_field.`value` ELSE 0 END)
AS 'Beginn-Dauer' FROM cats.joborder LEFT JOIN cats.extra_field ON
(cats.joborder.`joborder_id`=3Dcats.extra_field.`data_item_i d`)
GROUP by cats.joborder.`joborder_id`, cats.joborder.`title`

WHERE cats.joborder.`public` =3D "1" AND cats.joborder.`is_admin_hidden`
=3D "0";

You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near 'WHERE cats.joborder.`public` =3D "1" AND
cats.joborder.`is_admin_hidden` =3D "0"' at line 1

Hast Du eine Lösung? Es dürfen nur die Sätze aus Tabelle a gelesen
werden WHERE cats.joborder.`public` =3D "1" AND
cats.joborder.`is_admin_hidden` =3D "0";

Re: Neue Zeile bauen?

am 28.01.2008 13:01:04 von Thomas Rachel

namor schrieb:
^^^^^ was fürn Ding?

> das ganze sieht jetzt so aus bei mir:
>
> SELECT cats.joborder.`joborder_id`, cats.joborder.`title`,
> cats.joborder.`state`, cats.joborder.`city`, cats.joborder.`type`,
> SUM(CASE WHEN cats.extra_field.`field_name`='Referenz' THEN
> cats.extra_field.`value` ELSE 0 END)
> AS Referenz, SUM(CASE WHEN cats.extra_field.`field_name`='Beginn-
> Dauer' THEN cats.extra_field.`value` ELSE 0 END)
> AS 'Beginn-Dauer' FROM cats.joborder LEFT JOIN cats.extra_field ON
> (cats.joborder.`joborder_id`=cats.extra_field.`data_item_id` )
> GROUP by cats.joborder.`joborder_id`, cats.joborder.`title`
>
> WHERE cats.joborder.`public` = "1" AND cats.joborder.`is_admin_hidden`
> = "0";

Das nächste Mal bitte etwas leserlicher formatieren, danke.

Wenn ich das aus dem Wust richtig herauslese, ist da ein GROUP BY... und
danach ein WHERE... . Das geht so nicht - die reihenfolge ist eine
andere. Siehe auch Handbuch auf dev.mysql.com.

HTH,

Thomas

Re: Neue Zeile bauen?

am 28.01.2008 14:37:29 von namor

On 28 Jan., 13:01, Thomas Rachel
wrote:
> namor schrieb:
> ^^^^^ was fürn Ding?
>
> > das ganze sieht jetzt so aus bei mir:
>
> > SELECT cats.joborder.`joborder_id`, cats.joborder.`title`,
> > cats.joborder.`state`, cats.joborder.`city`, cats.joborder.`type`,
> > SUM(CASE WHEN cats.extra_field.`field_name`=3D'Referenz' THEN
> > cats.extra_field.`value` ELSE 0 END)
> > AS Referenz, SUM(CASE WHEN cats.extra_field.`field_name`=3D'Beginn-
> > Dauer' THEN cats.extra_field.`value` ELSE 0 END)
> > AS 'Beginn-Dauer' FROM cats.joborder LEFT JOIN cats.extra_field ON
> > (cats.joborder.`joborder_id`=3Dcats.extra_field.`data_item_i d`)
> > GROUP by cats.joborder.`joborder_id`, cats.joborder.`title`
>
> > WHERE cats.joborder.`public` =3D "1" AND cats.joborder.`is_admin_hidden`=

> > =3D "0";
>
> Das nächste Mal bitte etwas leserlicher formatieren, danke.
>
> Wenn ich das aus dem Wust richtig herauslese, ist da ein GROUP BY... und
> danach ein WHERE... . Das geht so nicht - die reihenfolge ist eine
> andere. Siehe auch Handbuch auf dev.mysql.com.
>
> HTH,
>
> Thomas

Ok, das nächste mal eingerückt.
Lies das Ding mal rückwärts.

Roman

Re: Neue Zeile bauen?

am 28.01.2008 15:43:53 von Thomas Rachel

namor schrieb:
^^^^^ ?

> Ok, das nächste mal eingerückt.
> Lies das Ding mal rückwärts.

Hab ich. Meinen Hinweis auf Reihenfolge von WHERE und GROUP BY sowie auf
das Handbuch hast Du gelesen?

Thomas

Re: Neue Zeile bauen?

am 28.01.2008 22:03:16 von namor

Hallo Thomas,

hab ich gelesen mit dem Ergebniss dass die Abfrage läuft.

Leider Zeigt sie in der Ausgabe durch ...


1.SELECT cats.joborder.`joborder_id`, \
cats.joborder.`title`, \
cats.joborder.`state`, \
cats.joborder.`city`, \
cats.joborder.`type`, \
2.SUM(CASE WHEN cats.extra_field.`field_name`=3D'Referenz' \
3.THEN cats.extra_field.`value` ELSE '' END) \
4.AS Referenz, \
5.SUM(CASE WHEN cats.extra_field.`field_name`=3D'Beginn-Dauer' \
6.THEN cats.extra_field.`value` ELSE '' END) \
7.AS 'Beginn-Dauer' \
8.FROM cats.joborder \
9.LEFT JOIN cats.extra_field \
10.ON (cats.joborder.`joborder_id`=3Dcats.extra_field.`data_item_i d`) \
11.WHERE cats.joborder.`public` =3D "1" \
12.AND cats.joborder.`is_admin_hidden` =3D "0" \
13.GROUP by cats.joborder.`joborder_id`, cats.joborder.`title`;

.. nur die numerischen Werte an.

_2 "Text A" xy 1A2B FL 0 0
_3 "Text B" zh hallo C2H 123 456

das bedeutet in Satz _2 "Text A" ...

steht tatsächlich anstatt 0 0 ein String, String Eintrag.

Das fragliche Tabellen- Attribut cats.extra_field.`value` ist vom Typ
TEXT.

Die Anwendung (PHP) schreibt die Daten korrekt in die Tabelle.

Der Query Browser zeigt die korrekten Werte, von den Umlauten einmal
abgesehen.

charset der DB ist utf-8, die der PHP Anwendung ist dezeit unbekannt
(US Amerika).


Ich habe kräftig ge-Googled, jetzt raucht mir der Kopf ;)

Allerdings habe ich auch viel interessantes gefunden, dass mir leider
aktuell nicht wirklich hilft.

Ich habe versucht eine Entsprechung für SUM (intuitiv sag ich mal das
ist es nicht) zu finden, leider ohne Ergebnis.

Roman