שלום וברכה
יש לי שאילתה שמביאה הרבה צבירות מכל מיני מקומות (ובגלל הגנריות של המערכת אין לי אפשרות אפ' לדעת כמה היא תכיל) וגם חישובים של הצבירות (כלומר צבירה {אופרטור} צבירה)
הנקודה היא: שאני גם אמור לבצע חיפוש בכל העמודות (בין עמודות הצבירה ובין עמודות רגילות)
וכאן מגיעה השאלה:
יש לי אפשרות להשתמש בwhere כך זה בערך נראה:
WHERE `collection_id` = 6
and (
(
(
SELECT sum(`meta_records`.`VALUE`)
FROM `meta_records`
INNER JOIN `records` AS `laravel_reserved_0` ON `laravel_reserved_0`.`id` = `meta_records`.`record_id`
INNER JOIN `meta_records` AS `data0` ON `data0`.`record_id` = `laravel_reserved_0`.`id`
WHERE `records`.`id` = `data0`.`VALUE`
and `meta_records`.`field_id` = 27
) -(
SELECT sum(`meta_records`.`VALUE`)
FROM `meta_records`
INNER JOIN `records` AS `laravel_reserved_1` ON `laravel_reserved_1`.`id` = `meta_records`.`record_id`
INNER JOIN `meta_records` AS `data1` ON `data1`.`record_id` = `laravel_reserved_1`.`id`
INNER JOIN `meta_records` AS `data0` ON `data0`.`record_id` = `data1`.`VALUE`
WHERE `records`.`id` = `data0`.`VALUE`
and `meta_records`.`field_id` = 23
)
) like '%29617192161911%'
or (
(
(
SELECT `data_data_0`.`VALUE`
FROM `meta_records` AS `data_data_0`
INNER JOIN `records` AS `records_data2` ON `records_data2`.`id` = `data_data_0`.`record_id`
INNER JOIN `meta_records` AS `data0` ON `data0`.`VALUE` = `records_data2`.`id`
WHERE `data0`.`record_id` = `records`.`id`
and `data_data_0`.`field_id` = 10
) *(
SELECT sum(`meta_records`.`VALUE`)
FROM `meta_records`
INNER JOIN `records` AS `laravel_reserved_2` ON `laravel_reserved_2`.`id` = `meta_records`.`record_id`
INNER JOIN `meta_records` AS `data0` ON `data0`.`record_id` = `laravel_reserved_2`.`id`
WHERE `records`.`id` = `data0`.`VALUE`
and `meta_records`.`field_id` = 15
)
) + (
SELECT `data_data_0`.`VALUE`
FROM `meta_records` AS `data_data_0`
INNER JOIN `records` AS `records_data2` ON `records_data2`.`id` = `data_data_0`.`record_id`
INNER JOIN `meta_records` AS `data2` ON `data2`.`VALUE` = `records_data2`.`id`
INNER JOIN `meta_records` AS `data1` ON `data1`.`VALUE` = `data2`.`record_id`
INNER JOIN `meta_records` AS `data0` ON `data0`.`VALUE` = `data1`.`record_id`
WHERE `data0`.`record_id` = `records`.`id`
and `data_data_0`.`field_id` = 10
)
) like '%29617192161911%'
)
צריך גם לציין שבמקרה והחיפוש הוא כמה מילים, אני מפרק אותם ומחפש כל אחד בנפרד בכל העמודות עם קבוצת OR.
ויש לי אפשרות להשתמש בhaving עם שמות העמודות בפועל (אחרי הכינוי AS)
מצד אחד זה יראה הרבה יותר מסודר עם HAVING
ומצד שני אני לא יודע מה ההשלכות האופטימליות של כל אחת מהאפשרויות
מה גם שבHAVING אצטרך להשתמש בכל קבוצות השאילתה, אין לי יכולות לפרק בין where ל having כי חלק מהם הם or אחד בשני תלוי.