This topic is locked

Union in select statement --> no working search functions

5/16/2007 10:56:08 AM
PHPRunner General questions
J
jwasielewski author

Dear all,
first of all, phprunner is a great program, i'm testing it since some days, and it is very easy to handle.

But unfortunately I have one question about using unions in the select statement.
Here is my select statement (my original table is mysql.stunden because there I have the most queries)
[codebox]select

mitarbeiter.Stammnummer,

mitarbeiter.Nachname, dayname(stunden.datum) AS Tag,

stunden.Datum As Datum,

@Kategorie:='Arbeitstag' AS Kategorie,

@von:='---' AS von,

@bis:='---' AS bis,

@Gesamtstunden:='---' AS Gesamtstunden, --> here I have a special query to calculate hours (depends on the mysql.stunden table)

@Reisezeit:='---' As Reisezeit,

@Reiseoption:='---' As Reiseoption,

@Ueberstunden:='---' As Ueberstunden, --> special query

@Zuschlag25:='---' AS 'Zuschlag 25%', --> special query

@Zuschlag50:='---' AS 'Zuschlag 50%', --> special query

@Zuschlag70:='---' As 'Zuschlag 70%' --> special query

from mysql.mitarbeiter, mysql.stunden, mysql.kalender

where kalender.datum=stunden.datum and stunden.Stammnummer=mitarbeiter.Stammnummer

union

select

mitarbeiter.Stammnummer,

mitarbeiter.Nachname, dayname(ueberstunden.datum) AS Tag,

ueberstunden.Datum As Datum,

@Kategorie:='Überstunden abgefeiert' AS Kategorie,

@von:='---' AS von,

@bis:='---' AS bis,

@Gesamtstunden:='---' AS Gesamtstunden,

@Reisezeit:='---' As Reisezeit,

@Reiseoption:='---' As Reiseoption,

@Ueberstunden:='---' As Ueberstunden,

@Zuschlag25:='---' AS 'Zuschlag 25%',

@Zuschlag50:='---' AS 'Zuschlag 50%',

@Zuschlag70:='---' As 'Zuschlag 70%'

from mysql.kalender, mysql.ueberstunden, mysql.mitarbeiter

where kalender.datum=ueberstunden.datum and ueberstunden.Stammnummer=mitarbeiter.Stammnummer

union

select

mitarbeiter.Stammnummer,

mitarbeiter.Nachname, dayname(krankheit.datum) AS Tag,

krankheit.Datum As Datum,

@Kategorie:='Krankheit',

@von:='---' AS von,

@bis:='---' AS bis,

@Gesamtstunden:='---' AS Gesamtstunden,

@Reisezeit:='---' As Reisezeit,

@Reiseoption:='---' As Reiseoption,

@Ueberstunden:='---' As Ueberstunden,

@Zuschlag25:='---' AS 'Zuschlag 25%',

@Zuschlag50:='---' AS 'Zuschlag 50%',

@Zuschlag70:='---' As 'Zuschlag 70%'

from mysql.kalender, mysql.krankheit,mysql.mitarbeiter

where (kalender.datum=krankheit.datum and mitarbeiter.Stammnummer=krankheit.Stammnummer)

union

select

mitarbeiter.Stammnummer,

mitarbeiter.Nachname,dayname(feiertage.Feiertag) AS Tag,

feiertage.Feiertag As Datum,

@Kategorie:='Feiertag' As Kategori,

@von:='---' AS von,

@bis:='---' AS bis,

@Gesamtstunden:='---' AS Gesamtstunden,

@Reisezeit:='---' As Reisezeit,

@Reiseoption:='---' As Reiseoption,

@Ueberstunden:='---' As Ueberstunden,

@Zuschlag25:='---' AS 'Zuschlag 25%',

@Zuschlag50:='---' AS 'Zuschlag 50%',

@Zuschlag70:='---' As 'Zuschlag 70%'

from mysql.feiertage, mysql.mitarbeiter

where feiertage.Feiertag < '2008-01-01'

union

select

mitarbeiter.Stammnummer,

mitarbeiter.Nachname, dayname(kalender.datum) AS Tag,

kalender.Datum AS Datum,

@Kategorie:='Urlaub' As Kategorie,

@von:='---' AS von,

@bis:='---' AS bis,

@Gesamtstunden:='---' AS Gesamtstunden,

@Reisezeit:='---' As Reisezeit,

@Reiseoption:='---' As Reiseoption,

@Ueberstunden:='---' As Ueberstunden,

@Zuschlag25:='---' AS 'Zuschlag 25%',

@Zuschlag50:='---' AS 'Zuschlag 50%',

@Zuschlag70:='---' As 'Zuschlag 70%'

from mysql.kalender, mysql.mitarbeiter, mysql.urlaub

where (kalender.datum between urlaub.von and urlaub.bis) and mitarbeiter.Stammnummer=urlaub.Stammnummer

order by Datum;[/codebox]
That query works fine if I run it in mysql. It is also running with phprunner in the xxx_list.php opening the first time as admin.

The security for that xx_list. site is so, that everyone can only see his own data. So when somebody else opens the xxx_list page

he get's an error message because LoginID (login table) and Id of the mysql.stunden table is not correct (because it's not only the id from mysql.stunden, but also from mysql.ueberstunden, mysql.krankheit and so on)
Also when I use the search functions one the search page (i'm searching for name, id and date), I get error messages.

error type 256

Unknown column 'stunden.Datum' in 'where clause'
The search fields are the fields from the original table mysql.stunden and not matching with the table view I create with the union statement, I guess.

Maybe you have some hints for me?
Thanks a lot for you help.
Janina

Sergey Kornilov admin 5/16/2007

Janina,
my advise is to build a View on the top on this query in MySQL (if you use MySQL 5.0) and use this View as a datasource in PHPRunner.

J
jwasielewski author 5/18/2007

Janina,

my advise is to build a View on the top on this query in MySQL (if you use MySQL 5.0) and use this View as a datasource in PHPRunner.


Hi, thanks a lot for your fast answer.

I try to use, but when I build a View in MySQL the data of that view is not automatically refresh, I think? Some data of the query are changed because users add, edit and delete data. I want always actual data and I'm not sure, if I build a view and integrate that

view into php runner if I always get actual data... .
Thanks a lot for your advice..
best regards Janina

Sergey Kornilov admin 5/18/2007

Janina,
view in MySQL always work with fresh data. The purpose of view is to shape data the certain way.
You must be confusing it with data snapshot or something similar.

J
jwasielewski author 5/23/2007

Janina,

view in MySQL always work with fresh data. The purpose of view is to shape data the certain way.
You must be confusing it with data snapshot or something similar.

J
jwasielewski author 5/23/2007

Janina,

view in MySQL always work with fresh data. The purpose of view is to shape data the certain way.
You must be confusing it with data snapshot or something similar.


Hi again,
thanks a lot for your help. Worked great!
Janina