Mysql 2 sütunlar arasında bir VEYA ile SEÇİMİ

4 Cevap php

Ben bir 'benzer bir ürün' Bağlantı tablosunu oluşturma.

i 2 sütun tablo var. Her iki sütun ürün kimliklerini içerir.

CREATE TABLE IF NOT EXISTS `prod_similar` (
  `id_a` int(11) NOT NULL,
  `id_b` int(11) NOT NULL
)    

INSERT INTO `prod_similar` (`id_a`, `id_b`) VALUES
(5, 10),
(5, 15),
(10, 13),
(10, 14),
(14, 5),
(14, 13);

Ben 3 benzer ürünleri, id ilk col olduğunu lehine ürünleri, 'ID_A' seçmek istediğiniz

SELECT * FROM prod_similar WHERE id_a={$id} OR id_b={$id}
ORDER BY column(?) 
LIMIT 3

4 Cevap

Ben de diğer sütunları var sayıyorum

(SELECT 1 favouring, id_a id, [other columns]
FROM prod_similar
WHERE id_a = {$id})
UNION
(SELECT 2 favouring, id_b id, [other columns]
FROM prod_similar
WHERE id_b = {$id})
ORDER BY favouring, id
LIMIT 3;

Eğer çiftleri umursamıyorum ya da orada ID_A arasında yok olan ve oldukça hızlı olan ALL yerine UNION yapabilirsiniz id_b.

Sendikalar denormalized veri göstergesidir, denormalized verilerin belirli sorguların hızını artırır ve (bu gibi) başkalarının hızını azaltır.

Belki bu, biliyor musunuz?

SELECT * 
FROM similar_items 
WHERE col_1={$id} OR col_2={$id} 
ORDER BY CASE WHEN col_1={$id} THEN 0 WHEN col_2={$id} THEN 1 END 
LIMIT 3

Bunu yapmanın kolay bir yolu şudur:

ORDER BY NULLIF(col_1, {$id}) LIMIT 3

CASE WHEN gibi iyi çalışıyor, ama bu biraz daha basittir.

Ben belki kaynak tablo için örnek veri göndermek ve aynı zamanda sonuç gibi görünmelidir ne gösterebilirim, ben soru almak emin değilim.

Sana doğru var varsa ben gibi bir şey denemek istiyorum

Select (case  
  when col_1={$ID}:  
    col1 
  when col_2={$ID}: 
    col2) as id from similar_items  WHERE col_1={$id} OR col_2={$id} 
LIMIT 3