Помогите с SQL-запросом
182 сообщения
#11 лет назад
SELECT DISTINCT(n.nid), n.created, n.sticky, n.title, n.created, p.model, p.sell_price, p.ordering
FROM {node} n
INNER JOIN {term_node} AS tn ON n.nid = tn.nid
INNER JOIN {uc_products} AS p ON n.vid = p.vid
WHERE n.status = 1
AND tn.tid IN (1,2,3,7,8,9)
AND n.type IN ('node')
ORDER BY n.nid DESC
SQL в формате для Drupal, и он работает.
Выборка сейчас идет по tn.tid 1 или 2 или 3 или 7 или 8 или 9.
Можно ли переписать его так, чтобы выборка происходила из 1,2,3 но И включала еще 7,8,9. То есть, другими словами чтото типа (1 || 2 || 3) && (7 || 8 || 9)
желательно не ресурсоемко, потому-что в базе выше 50тыс строк
182 сообщения
#11 лет назад
SELECT DISTINCT(n.nid), n.created, n.sticky, n.title, n.created, p.model, p.sell_price, p.ordering
FROM {node} n
INNER JOIN {term_node} AS tn ON n.nid = tn.nid
INNER JOIN {term_node} AS tn2 ON n.nid = tn2.nid
INNER JOIN {uc_products} AS p ON n.vid = p.vid
WHERE n.status = 1
AND tn.tid IN (1,2,3)
AND tn2.tid IN (7,8,9)
AND n.type IN ('node')
ORDER BY n.nid DESC
так правильно? или можно упростить?
182 сообщения
#11 лет назад
Цитата ("floppox"):Зачем два раза джоините одно и то же?
потому-что у каждой записи по несколько tid, например 1 и 7, мне нужно проверить чтоб он состоял в первом массиве числ и одновременно во втором...
запрос уже проверил, работает, то, что мне нужно. Но не уверен в затратах на ресурсы...
0.0037 сек выполнялся из 26тыс строк, ожидал худшего)
6863 сообщения
#11 лет назад
Stan-87, тогда вот это AND tn.tid IN (1,2,3)
AND tn2.tid IN (7,8,9)
По всей видимости должно быть в ON, а не в WHERE
182 сообщения
#11 лет назад
floppox, спасибо. Попробовал. Вместо 0.0037 сек, этот занял чуть меньше)) 0.0030 сек