0

わかりました。私がやろうとしているのは、4つの別々の列にまたがる1つのテーブルから一意の値を取得することです。

たとえば、次のクエリは、列の1つで正しく機能します。

SELECT 
    rest.cuisine1, c.name
FROM
    specials
    INNER JOIN restaurant AS rest ON specials.restaurantid=rest.id
    INNER JOIN cuisine AS c ON rest.cuisine1=c.id
WHERE
    dateend >= CURDATE()
AND
    (specials.state='VIC' OR specials.state = 'ALL') 
AND 
    specials.status = 1 
AND 
    rest.status = 1
GROUP BY
    c.id;

さて、rest.cuisine1はデータを含む列の1つです。予想どおり、このクエリはその列からのみ一意の値を返します。以下は、返されるものの例です。

12 Cafe
18 Asian
29 Coffee

そのテーブルにはさらに3つの列があり、それらは次のとおりです。

rest.cuisine2
rest.cuisine3
rest.cuisine4

上記のクエリを4回(各列に1つずつ)実行し、次にPHPを介して値を実行して、4つの異なる結果セットから一意の値のみを取得できますが、必要なものをすべて取得できるかどうかを確認したいと考えていました。 1つのクエリ。

4

2 に答える 2

1

これを試して

 SELECT 
    rest.cuisine1, c.name ,rest.cuisine2 , rest.cuisine3, rest.cuisine4
FROM
    specials
    INNER JOIN restaurant AS rest ON specials.restaurantid=rest.id
    INNER JOIN cuisine AS c ON rest.cuisine1=c.id
            INNER JOIN cuisine AS c2 ON rest.cuisine2=c2.id
            INNER JOIN cuisine AS c3 ON rest.cuisine3=c3.id
            INNER JOIN cuisine AS c4 ON rest.cuisine4=c4.id
WHERE
    dateend >= CURDATE()
AND
    (specials.state='VIC' OR specials.state = 'ALL') 
AND 
    specials.status = 1 
AND 
    rest.status = 1
GROUP BY
    c.id;
于 2012-12-16T12:32:43.373 に答える
0

この回答は、彼がコメントに投稿したMahmoudGamalの回答に基づいていますが、彼は何らかの理由で削除しました。

以下を使用しました。

SELECT 
    c.id, c.name
FROM
    specials
    INNER JOIN restaurant AS rest ON specials.restaurantid=rest.id
    INNER JOIN cuisine AS c ON c.id IN (rest.cuisine1, rest.cuisine2, rest.cuisine3, rest.cuisine4)
WHERE
    dateend >= CURDATE()
AND
    (specials.state='VIC' OR specials.state = 'ALL') 
AND 
    specials.status = 1 
AND 
    rest.status = 1
GROUP BY
    c.id;
于 2012-12-16T12:59:59.600 に答える