SQL查询的问题(有截图)

我有三个表:

Shop Shop_id City_id Address 1 1 Address 1 2 1 Address 2 3 2 Address 3 4 2 Address 4 5 1 Address 5 6 1 Address 6 City City_id Name 1 Vilnius 2 Kaunas Places Place_id Shop_id Book_id 1 3 1 2 2 1 3 3 2 4 4 3 5 3 3

Places台我省店在哪里可以买到专门的本子。 我也有复选框的形式:

$result = mysql_query("SELECT places.place_id, places.book_id, places.shop_id, shop.shop_id, shop.city_id,shop.address,city.city_id,city.name FROM shop INNER JOIN places ON places.shop_id=shop.shop_id INNER JOIN city ON shop.city_id=city.city_id") or die(mysql_error()); if(mysql_num_rows($result) > 0) { while($row = mysql_fetch_assoc($result2)) { echo '<tr> <td><input type="checkbox"'; if ($row['book_id']==$id2){echo 'checked';}echo' name="identifer[]" value="'.$row['shop_id'].'" /> <br /></td> <td>'.ucfirst($row['Name']).','.$row['Address'].' </td> </tr>

我试图创建表与checbox 所有可用的商店检查值,如果Book_id等于$id2 。 为了更清楚这里的截图,它显示了我从我的代码获得:

SQL查询的问题(有截图)

显然,它基本上写下所有商店Places表。 我试图改变我的SQL代码,但我不能得到它的权利,所以我需要帮助。

--------------解决方案-------------

我猜你的问题是不是与解决LEFT JOIN因为这样你可以得到多个PlacesShop 。 尝试这个:

SELECT EXISTS (SELECT * FROM places p
WHERE p.shop_id = s.shop_id AND p.Book_id = $id2) AS has_book
,s.shop_id, s.city_id, s.address
,c.city_id, c.name
FROM shop s
JOIN city c USING (city_id) -- or LEFT JOIN if city could be missing



或者,如果(Shop_id, Book_id)保证是独一无二的-这意味着一本书不能多次出现在商店- 并希望包括列Places ,你可以使用这样的查询:

SELECT p.place_id, p.book_id, p.shop_id
,s.shop_id, s.city_id, s.address
,c.city_id, c.name
FROM shop s
JOIN city c USING (city_id) -- or LEFT JOIN if city could be missing
LEFT JOIN places p ON p.shop_id = s.shop_id AND p.Book_id = $id2

注意附加条件在ON的子句LEFT JOIN 。 一定在那里,而不是在WHERE子句。 这就给了你每一个商店, 只有当它有书的地方追加数据。 作为一个店可以有每本书只有一次, 没有店铺将增加一倍。

你正在做一个INNER两个表的连接。 这意味着该查询将返回记录那里的上唯一参加双方的数据。 你的邻居表只列出商店2,3,4。 因此,与1,5,6号在商店表中的记录将不予退还,因为没有匹配的地方记录。

尝试更换您的内部连接用左手JOINS

你为什么不通过ID2查询到您的查询? 如果我正确理解你的问题:

$query = sprintf("SELECT places.place_id, places.book_id, places.shop_id,
shop.shop_id, shop.city_id,shop.address,city.city_id,city.name
FROM shop INNER JOIN places ON places.shop_id=shop.shop_id
INNER JOIN city ON shop.city_id=city.city_id
AND places.Place_id='%s'",mysql_real_escape_string($id2));

$result = mysql_query($query);

Shop LEFT JOIN Places LEFT JOIN CityGROUP BY shop_id

分类:php 时间:2013-07-10 人气:0
本文关键词: PHP和MySQL,SQL
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.365 (s). 9 q(s)