Hi,

Georg Ringer wrote:
Am 14.11.2011 19:58, schrieb Xavier Perseguers:
The big problem comes from having to deal with comma-separated values to
reference records (here fe_groups) instead of real foreign keys.
so how should an ideal query look like instead?

> (tt_news.fe_group='' OR tt_news.fe_group
> IS NULL OR tt_news.fe_group='0'

No group

> OR (tt_news.fe_group LIKE '%,0,%' OR
> tt_news.fe_group LIKE '0,%' OR tt_news.fe_group LIKE '%,0' OR
> tt_news.fe_group='0') OR (tt_news.fe_group LIKE '%,-1,%' OR
> tt_news.fe_group LIKE '-1,%' OR tt_news.fe_group LIKE '%,-1' OR
> tt_news.fe_group='-1')

-1 is a virtual group used to "Hide content at any login" [1]

So basically we search news which are targeted at no, group, group "0" (= no group), or that should be hidden at login.

With a proper structure, we would have something like

- table tt_news (uid, ...)
- table fe_groups (uid, ...)
- table tt_news_fegroups_mm (uid_local, uid_foreign)

uid_local is a foreign key to tt_news(uid)
uid_foreign is a foreign key to fe_groups(uid)

Thus search for news without any group:

SELECT * FROM tt_news WHERE NOT EXISTS(SELECT * FROM tt_news_fegroups_mm WHERE uid_local=tt_news.uid)

Search news with the group "-1":

SELECT * FROM tt_news WHERE EXISTS(SELECT * FROM tt_nerws_fegroups_mm WHERE uid_local=tt_news.uid AND uid_foreign=-1)

OK, when using DB constraints on foreign keys, we would need to have a real fe_group entry for -1 and -2 (or 0) but I guess you get the point.

The latter query could be rewritten as INNER JOIN without subquery as well.

HTH

[1] http://xavier.perseguers.ch/en/tutorials/typo3/articles/indexed-search-crawler.html#c868

--
Xavier Perseguers
Release Manager TYPO3 4.6

TYPO3 .... inspiring people to share!
Get involved: http://typo3.org

_______________________________________________
TYPO3-english mailing list
TYPO3-english@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-english

Reply via email to