Вадим П.
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


так правильно? или можно упростить?
Елена Б.
6863 повідомлення
#11 років тому
Зачем два раза джоините одно и то же?
Вадим П.
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 сек
Елена Б.
6863 повідомлення
#11 років тому
Stan-87, такие вещи оптимизируются движком БД, потому прирост не особый. Но соблюдение семантики нужно взять за правило.