Обсуждение: SQL Query

Поиск
Список
Период
Сортировка

SQL Query

От
Miguel González
Дата:

Dear all,

I want to do a query to my PostgreSQL database. I want to use it in a PHP web client that I have got, but also

I have tried in the back-end.

I have the following tables on my database ( I translate the field names from Spanish into English)

cdroms

-------

code_cdroms

items

-----

code_items

description

cdroms_items

-------------

code_cdroms

code_items

loans

----------

code_loan

reservations

--------

code_reservation

The Query I want to execute is to search the cdroms that contains an item with the description provided by a form by the user.

That query works fine, it is just a simple join among cdroms, items and cdroms_items.

My problem shows up when I want to create two new fields to show whether the cdrom is on loan or is booked (someone made a reservation).

After reading some books and web sites, I concluded to use the CASE statement ( I do not know if there is any other alternative). I tried it, and it

worked, but only in the case there is any register in the loans or reservations tables, if there is not, the back-end says that you are trying to get more

than 200 registers. What am I doing wrong? Here you have the SQL query. I translated the name of the fields, hope there is no mistake.

I search for a string 'net' in the description field of the items table:

SELECT

cdroms.code_cdroms,cdroms_etiqueta,items.description,loans.code_loans,

loans.tabletype,reservations.code_reservations,reservations.tabletype,

(case

when

cdroms.code_cdroms=cdroms_items.code_cdroms

and cdroms.code_cdroms=code_prestamo

and cdroms_items.code_items=items.code_items

and items.description like %net%

then 'Yes' else 'No'

end)

as onloan,

(case

when

cdroms.code_cdroms=cdroms_items.code_cdroms

and cdroms.code_cdroms=code_loans

and cdroms.code_cdroms= ANY (select code_reservations from

reservations)

and cdroms_items.code_items=items.code_items

and items.description like %net%

then 'Yes' else 'No'

end)

as booked

from cdroms,items,cdroms_items,loans,reservations

where

cdroms.code_cdroms=cdroms_items.code_cdroms

and loans.tabletype='cdroms'

and cdroms_items.code_items=items.code_items

and items.description like '%net%';

Sorry for my English. Hope you can understand. Is is a problem of concept or a sintax problem?

Many thanks in advance

Regards

Miguel

 

 

 

Re: SQL Query

От
Miguel González
Дата:
Sorry If i didnt make clear which are the fields and which are the tables.
The tables are the ones "underlined", so I have cdroms, items, cdroms_items,
loans and reservations. I just left the important
fields in order not to confuse the people, and just wrote the name of the
fields that are the primary keys and also the foreign keys.

An item can be in different cdroms, and a cdrom can have different items,
thats why i have the table cdroms_items for the n to n relation. I forgot to
put the name of some fields when I translated into English, I am sorry about
it. In the tables loans and reservations i added a field called typetable, a
string where i store wich kind of object is loaned or booked, this is
because I also have a hardware table, where i store names of different
hardware that also could be loaned or booked. The idea is that the loanable
and bookable objets and therefore the number of tables will be increased
(books,magazines, etc).

I reviewed the query and i noticed that I didnt translate well some names,
sorry again. Hope that now you can help me out, i am getting close to the
dateline.

Many thanks  Miguel


---------------- Reviewed information  ----------------------------


In loans i

cdroms
-------
code_cdroms
label

items
-----
code_items
description


cdroms_items
-------------
code_cdroms
code_items

loans
----------
code_loan
typetable


reservations
--------
code_reservation
typetable




SELECT

cdroms.code_cdroms,cdroms_label,items.description,loans.code_loans,
loans.tabletype,reservations.code_reservations,reservations.tabletype,
(case
when
cdroms.code_cdroms=cdroms_items.code_cdroms
and cdroms.code_cdroms=code_loan
and cdroms_items.code_items=items.code_items
and items.description like %net%
then 'Yes' else 'No'
end)

as onloan,
(case
when
cdroms.code_cdroms=cdroms_items.code_cdroms
and cdroms.code_cdroms=code_loan
and cdroms.code_cdroms= ANY (select code_reservations from
reservations)
and cdroms_items.code_items=items.code_items
and items.description like %net%
then 'Yes' else 'No'
end)
as booked
from cdroms,items,cdroms_items,loans,reservations
where
cdroms.code_cdroms=cdroms_items.code_cdroms
and loans.tabletype='cdroms'
and cdroms_items.code_items=items.code_items
and items.description like '%net%';




----- Original Message -----
From: "Adam Lang" <aalang@rutgersinsurance.com>
Cc: "PostgreSQL PHP" <pgsql-php@postgresql.org>
Sent: Tuesday, September 11, 2001 2:52 PM
Subject: Re: [PHP] SQL Query


> If you could give the table layouts a little bit better, I may be able to
> help.  I can't quite tell what the table names are and what the fields
are.
>
> As a preliminary guess, it almost looks like you don't have fields in the
> other tables to properly link thedata... but again I can't tell for sure.
>
> Adam Lang
> Systems Engineer
> Rutgers Casualty Insurance Company
> http://www.rutgersinsurance.com
> ----- Original Message -----
> From: "Miguel González" <iafmgc@unileon.es>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>