Oznámení
Jak na and a orv jedné podmínce
před 5 lety
- Tirus91
- Generous Backer | 199
ahoj,
potřeboval bych poradit jak udělat %or a %and v jednom WHERE
v DibiConnection v Nette
snažím se si zjednodušit něco takéhleho
if ($showAll) {
if ($topicId == null) {
$res = $this->database->query('SELECT article_post.*, article_topic.title as topic_title, security_users.id as user_id, security_users.login as author_login FROM article_post LEFT JOIN security_users ON article_post.security_users_id = security_users.id LEFT JOIN article_topic ON article_post.article_topic_id = article_topic.id');
} else {
$res = $this->database->query('SELECT article_post.*, article_topic.title as topic_title, security_users.id as user_id, security_users.login as author_login FROM article_post LEFT JOIN security_users ON article_post.security_users_id = security_users.id LEFT JOIN article_topic ON article_post.article_topic_id = article_topic.id WHERE article_topic_id = %i', $topicId);
}
} else {
if ($topicId == null) {
$res = $this->database->query('SELECT article_post.*, article_topic.title as topic_title, security_users.id as user_id, security_users.login as author_login FROM article_post LEFT JOIN security_users ON article_post.security_users_id = security_users.id LEFT JOIN article_topic ON article_post.article_topic_id = article_topic.id WHERE ( %or ', array(array('published_from <=', $dateTime), array('published_from is null')), ') AND ( %or ', array(array('published_to >=', $dateTime), array('published_to is null')), ')');
} else {
$res = $this->database->query('SELECT article_post.*, article_topic.title as topic_title, security_users.id as user_id, security_users.login as author_login FROM article_post LEFT JOIN security_users ON article_post.security_users_id = security_users.id LEFT JOIN article_topic ON article_post.article_topic_id = article_topic.id WHERE article_topic_id = %i', $topicId, ' AND ( %or ', array(array('published_from <=', $dateTime), array('published_from is null')), ') AND ( %or ', array(array('published_to >=', $dateTime), array('published_to is null')), ')');
}
}
před 5 lety
- Milo
- Nette Core | 1119
Máš víc možností. Buď si poskládat argumenty pro query do pole:
$sql = array();
$sql[] = '
SELECT
article_post.*,
article_topic.title as topic_title,
security_users.id as user_id,
security_users.login as author_login
FROM
article_post
LEFT JOIN security_users ON article_post.security_users_id = security_users.id
LEFT JOIN article_topic ON article_post.article_topic_id = article_topic.id
WHERE
1=1
';
if ($topicId !== NULL) {
$sql[] = '
AND article_topic_id = %i
';
$sql[] = $topicId;
}
if (!$showAll) {
$sql[] = '
AND (
published_from IS NULL
OR published_from <= %t
OR published_from >= %t
)
';
$sql[] = $dateTime;
$sql[] = $dateTime;
}
$this->database->query($sql);
Nebo použít modifikátory %if
a %end
:
$this->database->query('
SELECT
article_post.*,
article_topic.title as topic_title,
security_users.id as user_id,
security_users.login as author_login
FROM
article_post
LEFT JOIN security_users ON article_post.security_users_id = security_users.id
LEFT JOIN article_topic ON article_post.article_topic_id = article_topic.id
WHERE
1=1
%if', $topicId !== NULL, '
AND article_topic_id = %i', $topicId, '
%end
%if', !$showAll, '
AND (
published_from IS NULL
OR published_from <= %t', $dateTime, '
OR published_from >= %t', $dateTime, '
)
%end
');
a nebo by to asi šlo zapsat jedním velkým strukturovaným polem, ale do toho bych se moc nepouštěl.
před 5 lety
- Tirus91
- Generous Backer | 199
Super, ruku ti líbám :) Toto bylo asi zatím to nejhorší co sem nemohl rozjet na DIBI :) ještě jak je to s LIKE? Nějak sem nemohl najít patřičnou dokumentaci s poměrně dobrým samplem
před 5 lety
- Milo
- Nette Core | 1119
No, normálně, LIKE funguje ;)
před 5 lety
- Tirus91
- Generous Backer | 199
jj, už vím :) dal jsem tam vždy jen modifikátor a děsně jsem se vztekal že to nefunguje (pak mi došlo že tam musím dát ještě ‚LIKE‘ :) )
Ještě jednou mockrát děkuji :)