1

これが可能かどうかさえわかりません...私が何を扱っているかを示し、次に何をしたいかを示します。

州:

state_id

街:

town_id
state_id
misc_property

街:

street_id
town_id
state_id

これらは階層で設定されます。

私が選択したいもの:

misc_property を持つすべての町を選択すると同時に、それが属する州を選択し、その町のすべての通りを数えたいと思います。

これは私がこれまでに持っているものです:

$sql="SELECT 
    a.state_id AS state_id, 
    b.town_id AS town_id, 
    COUNT(c.street_id) 

    FROM 
    state a, 
    town b, 
    street c 

    WHERE 
    b.misc_property='$property'";
4

4 に答える 4

2

次のクエリを使用します。

SELECT
    town.state_id AS state_id,
    town.town_id AS town_id,
    COUNT(street.street_id) AS count
FROM
    state INNER JOIN town ON state.state_id = town.state_id 
    LEFT JOIN street ON town.town_id = street.town_id
GROUP BY
    state_id,
    town_id
HAVING
    town.misc_property = 'stuff';
于 2012-04-18T19:42:26.377 に答える
0

特別な WHERE 条件に HAVING を指定して GROUP BY town_id を使用できます

于 2012-04-18T19:42:22.947 に答える
0

結合を使用します。

SELECT * FROM state
LEFT JOIN town ON state.state_id = town.state_id
LEFT JOIN street ON street.town_id = town.town_id
WHERE town.misc_property = '$property'
于 2012-04-18T19:44:56.667 に答える
0

あなたはこのようにすることができます

$sql="SELECT 
    a.state_id AS state_id, 
    b.town_id AS town_id, 
    Select COUNT(c.street_id) From C Where C.town_id = b.town_id 

    FROM 
    state a, 
    town b, 
    street c 

    WHERE 
    b.misc_property='$property'and b.state_id = a.state_id "
于 2012-04-18T19:45:06.853 に答える