不知怎的,我真的不喜欢我写的以下请求,我发现它有点难看,有没有人有更好的方法来写它,建议或评论?
DoSQL("SELECT A.`quotation_id`, A.`quotation_uid`, A.`quotation_ref`, A.`quotation_name`, A.`from_uid`, A.`to_uid`, A.`original_amount`, A.`direct_discount`, A.`status`, B.`user_email`, C.`ct_first_name`, C.`ct_last_name`, C.`ct_addr_line_a`, C.`ct_addr_line_b`, C.`postal_code`, D.`account_name`, E.`name` AS `City`, F.`name` AS `Country`, H.`name` AS `Region`,
(SELECT `user_email` FROM `"._MIKI_TABLE_PREF."miki_users` WHERE `user_uniq_id` = A.`to_uid`) AS `REC_EMAIL`,
(SELECT `ct_first_name` FROM `"._MIKI_TABLE_PREF."miki_contacts` WHERE `original_user_uid` = A.`to_uid`) AS `REC_FNAME`,
(SELECT `ct_last_name` FROM `"._MIKI_TABLE_PREF."miki_contacts` WHERE `original_user_uid` = A.`to_uid`) AS `REC_LNAME`,
(SELECT `ct_addr_line_a` FROM `"._MIKI_TABLE_PREF."miki_contacts` WHERE `original_user_uid` = A.`to_uid`) AS `REC_LINE_A`,
(SELECT `ct_addr_line_b` FROM `"._MIKI_TABLE_PREF."miki_contacts` WHERE `original_user_uid` = A.`to_uid`) AS `REC_LINE_B`,
(SELECT `postal_code` FROM `"._MIKI_TABLE_PREF."miki_contacts` WHERE `original_user_uid` = A.`to_uid`) AS `REC_PS_CODE`,
(SELECT I.`account_name` FROM `"._MIKI_TABLE_PREF."miki_accounts` I LEFT JOIN
`"._MIKI_TABLE_PREF."miki_contacts` J ON I.`account_uid` = J.`ct_account_uid` WHERE J.`original_user_uid` = A.`to_uid`) AS `REC_ACCOUNT`,
(SELECT J.`name` FROM `"._MIKI_TABLE_PREF."miki_contacts` I LEFT JOIN
`"._MIKI_TABLE_PREF."citynames` J ON J.`ID` = I.`city`
WHERE I.`original_user_uid` = A.`to_uid` AND J.`locale` = '".$_SESSION['lang']."') AS `REC_CITY`,
(SELECT J.`name` FROM `"._MIKI_TABLE_PREF."miki_contacts` I LEFT JOIN
`"._MIKI_TABLE_PREF."countrynames` J ON J.`code` = I.`country`
WHERE I.`original_user_uid` = A.`to_uid` AND J.`locale` = '".$_SESSION['lang']."') AS `REC_COUNTRY`,
(SELECT L.`name` FROM `"._MIKI_TABLE_PREF."miki_contacts` I LEFT JOIN
`"._MIKI_TABLE_PREF."regions` J ON J.`code` = I.`ct_region` LEFT JOIN
`"._MIKI_TABLE_PREF."regions` K on K.`ID` = J.`ID` LEFT JOIN
`"._MIKI_TABLE_PREF."regionnames` L on L.`ID` = J.`ID`
WHERE I.`original_user_uid` = A.`to_uid` AND K.`country` = I.`country` AND L.`locale` = '".$_SESSION['lang']."') AS `REC_REGION`
FROM `"._MIKI_TABLE_PREF."miki_jaga_quotations` A LEFT JOIN
`"._MIKI_TABLE_PREF."miki_users` B on B.`user_uniq_id` = A.`from_uid` LEFT JOIN
`"._MIKI_TABLE_PREF."miki_contacts` C on B.`user_uniq_id` = C.`original_user_uid` LEFT JOIN
`"._MIKI_TABLE_PREF."miki_accounts` D on D.`account_uid` = C.`ct_account_uid` LEFT JOIN
`"._MIKI_TABLE_PREF."citynames` E ON E.`ID` = C.`city` LEFT JOIN
`"._MIKI_TABLE_PREF."countrynames` F on F.`code` = C.`country` LEFT JOIN
`"._MIKI_TABLE_PREF."regions` G on G.`code` = C.`ct_region` LEFT JOIN
`"._MIKI_TABLE_PREF."regions` H on H.`ID` = G.`ID` WHERE A.`quotation_uid` = '".$_GET['quid']."' AND B.`user_uniq_id` = '".htmlentities($_SESSION['user_uniq_id'])."' AND E.`locale` = '".$_SESSION['lang']."' AND F.`locale` = '".$_SESSION['lang']."' AND H.`country` = C.`country` GROUP BY A.`quotation_id`;", 'get_quotation_from_info');
不介意我直接传递给请求的变量,它们已经在代码中得到了验证。
提前致谢。
答案 0 :(得分:0)
构建最具体的查询,选择最小的数据集并从中解决,这样这些连接在性能上并不可怕。
为什么不重新开始使用您要过滤的值,选择Biggest表,编写一个查询以获得您想要的最小值。
从那里再次构建......你永远不应该每个字段进行查询!
答案 1 :(得分:0)
所以你建议多个请求,而不是只有一个请求获得所有结果?
"你永远不应该对每个字段进行查询!"
我知道,但是我无法找到更好的方法(除了多个请求)。