Hi,

i found a solution by myself
i think it's very complex but may help others
for finding solutions

Thats the query:
SELECT entries.id, entries.head, entries.date, entries.author
FROM entries
LEFT JOIN category ON entries.cat_no REGEXP
CONCAT("\\.",category.id,"(\\.|$)")
LEFT JOIN entgroup ON entries.id = entgroup.eid
LEFT JOIN catgroup ON category.id = catgroup.cid
LEFT JOIN mzgroup AS mze ON mze.id = entgroup.gid
LEFT JOIN mzgroup AS mzc ON mzc.id = catgroup.gid
WHERE
MATCH (head,text) AGAINST ("Who's not") &&
(entgroup.gid IS NULL || entgroup.gid = *user-group-id*)
GROUP BY entries.id HAVING min(catgroup.gid IS NULL || catgroup.gid =
*user-group-id*)<>0;

This is the result if all conditions are true otherwise i get none
+----+---------------+------------+--------------+
| id | head          | date       | author       |
+----+---------------+------------+--------------+
|  6 | Who's not ... | 2002-06-13 | Martin Adler |
+----+---------------+------------+--------------+

the soluton for my former problem is in the HAVING clause
the stuff in the min()-function returns only 1 when the category
have the same group-id as the user or the category don't have a
group-id otherwise it returns 0 this condition is executet for every
row in the table. If there's no conflict with the user-rights in "every"
row should be 1 the result of the condition
The min()-function selects the smallest value, if everything is Ok
the value is 1 and i get my result if not the value is 0 and 0 <> 0
isn't true and i don't get a result


if anyone have a questions about this query
just mail me
i'll try to help


i also thank everyone who tried to help me to find a soluton
and if anyone have a better solution please let me know


Martin


----- Original Message -----
From: "Martin Adler" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, June 25, 2002 9:51 PM
Subject: force no results


> Hi,
>
> is it possible to force mysql in a SELECT clause depend on a
> condition to give no results?
>
> OK here is my Query
>
> SELECT entries.id, entries.head, entries.date, entries.author,
(catgroup.gid
> IS NULL || catgroup.gid = *user-group-id*) AS indi
> FROM entries
> LEFT JOIN category ON entries.cat_no REGEXP
> CONCAT("\\.",category.id,"(\\.|$)")
> LEFT JOIN entgroup ON entries.id = entgroup.eid
> LEFT JOIN catgroup ON category.id = catgroup.cid
> LEFT JOIN mzgroup AS mze ON mze.id = entgroup.gid
> LEFT JOIN mzgroup AS mzc ON mzc.id = catgroup.gid
> WHERE
> MATCH (head,text) AGAINST ("Who's not") &&
> (entgroup.gid IS NULL || entgroup.gid = *user-group-id*);
>
>
> With thies query, i try to get a entry with a fulltext search.
> The entry should only be shown if the entry-group-id is NULL or
> is the same as the user-group-id and
> if all category-group-id's above the entry is NULL or
> is the same as the user-group-id
>
> With "GROUP BY indi" i'll get maximally 2 results with which i can handle
> easy in PHP
> but i want to try it in MySQL.
> Maybe someone knows a cleaner solution
>
> This is the result:
> +----+---------------+------------+--------------+------+
> | id | head          | date       | author       | indi |
> +----+---------------+------------+--------------+------+
> |  6 | Who's not ... | 2002-06-13 | Martin Adler |    1 |
> |  6 | Who's not ... | 2002-06-13 | Martin Adler |    0 |
> |  6 | Who's not ... | 2002-06-13 | Martin Adler |    1 |
> +----+---------------+------------+--------------+------+
>
>
> Here are the used tables
>
> Table entries
>
+----+-----+-------------+---------------+------------+--------------+------
> ---------------------------------------------------+----------------------
--
> ------+
> | id | uid | cat_no      | head          | date       | author       |
text
> | keywd                        |
>
+----+-----+-------------+---------------+------------+--------------+------
> ---------------------------------------------------+----------------------
--
> ------+
> |  1 |   1 | 0.1.3.8     | Headline  | 2002-03-12 | Martin Adler | Some
Text
> | keywords                 |
> |  2 |   2 | 0.1.2       | Mittagessen   | 2002-04-03 | Martin Adler |
> Fruehjahrsputz                                          | Spring
> |
> |  3 |   4 | 0.1.2       | Hausboot      | 2002-04-03 | Martin Adler |
> Quarktasche                                             | Summer
> |
> |  4 |   2 | 0.1.2.21.22 | Kongo         | 2002-04-04 | Martin Adler |
Kebup
> | Springer                     |
> |  5 |   2 | 0.1.3       | Hanfkissen    | 2002-04-04 | Martin Adler |
> Bananen sind lecker!                                | Palmen Testwagen
> Radiergummi |
> |  6 |   2 | 0.1.2.24    | Who's not ... | 2002-06-13 | Martin Adler | .in
> the group technik shouldn't be able to read this |
> |
>
+----+-----+-------------+---------------+------------+--------------+------
> ---------------------------------------------------+----------------------
--
> ------+
> * These are the entries, which are assigned to the categories
>
>
> Table category
> | id | cat_no             | cat                   |
> +----+--------------------+-----------------------+
> |  1 | 0                  | ROOT                  |
> |  2 | 0.1                | Hardware              |
> |  3 | 0.1                | Software              |
> |  4 | 0.1.2              | HP                    |
> |  5 | 0.1.2.4            | e-pc                  |
> |  6 | 0.1.2.4.5          | CD-Brenner            |
> |  7 | 0.1.2              | PC                    |
> |  8 | 0.1.3              | php                   |
> |  9 | 0.1.3.8            | rekursiv              |
> | 10 | 0.1.3.8.9          | path                  |
> | 12 | 0.1.3.8.9.10.11    | kategorie12           |
> | 15 | 0.1.3.8.9.10.11    | kategorie15           |
> | 16 | 0.1.3.8.9.10.11    | kategorie16           |
> | 17 | 0.1.3.8.9.10.11    | kategorie17           |
> | 20 | 0.1.3.8.9.10.11.12 | kategorie20           |
> | 21 | 0.1.2              | Netzwerktechnik       |
> | 22 | 0.1.2.21           | Router u. L3-Switches |
> | 24 | 0.1.2              | abba                  |
> +----+--------------------+-----------------------+
> * cat_no is the Hierarchy --> HP is a subdir of Hardware and Hardware is a
> subdir of ROOT and ROOT is the topleveldir
>
> Table mzgroup
> +----+---------+
> | id | name    |
> +----+---------+
> |  1 | nobody  |
> |  2 | technik |
> +----+---------+
>
>
> Table catgroup
> +-----+-----+
> | gid | cid |
> +-----+-----+
> |   2 |  24 |
> |   2 |  23 |
> |   1 |   2 |
> +-----+-----+
>
> * gid = group id, eid = category id
>
>
> Table entgroup
> +-----+-----+
> | gid | eid |
> +-----+-----+
> |   2 |   6 |
> +-----+-----+
> * gid = group id, eid = entries id
>
>
>
> thank's
>
>
>
>
> sincerely
> Martin
>
>
> -----------------------------------------------------------------
> Martin Adler                                       CGI, Perl, PHP
>
> Continum AG                                  Tel. +49 761 4794090
> Bötzinger Straße 29a                         Fax. +49 761 4794099
> 79111 Freiburg i. Br.                     http://www.continum.net
> -----------------------------------------------------------------
>
>


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to