Php 如何对MYSQL进行连接查询?

Php 如何对MYSQL进行连接查询?,php,mysql,sql,console,Php,Mysql,Sql,Console,我有两个mysql表:cs\u lots&cs\u lots\u history。相关:id=id\u lot 我需要编写一个查询,该查询将显示数组中每个cs\u lots批次的ID,如果ID=ID\u lot,还需要从cs\u lots\u历史记录中显示用户名 查询,我有: SELECT cs_lots_history.*, cs_lots.id as csid, inv_id, inv_assets, inv_image, inv_color, inv_name, inv_rarity,

我有两个mysql表:
cs\u lots
&
cs\u lots\u history
。相关:
id
=
id\u lot

我需要编写一个查询,该查询将显示数组中每个
cs\u lots
批次的ID,如果ID=ID\u lot,还需要从
cs\u lots\u历史记录中显示用户名
查询,我有:

SELECT cs_lots_history.*, cs_lots.id as csid, inv_id, inv_assets, inv_image, inv_color, inv_name, inv_rarity, inv_type, inv_price, price_ticket, places, now_places FROM cs_lots LEFT JOIN cs_lots_history ON cs_lots.id = cs_lots_history.id_lot WHERE active_lot='1' AND user_personaname='@Saundefined' GROUP BY cs_lots.id;
但事实上,它只需要6个批次,因为表
cs\u lots\u history
Nick
@Saundefined
只需要6次购买(唯一id\u批次)。如果没有,结果根本不会打印出来

如果您没有指定user_personame-然后获取所有12个批次的条件,但是没有查询的意义,那么数组将不会按用户获取此购买的商品

我想做一些类似的事情,显示所有12项,重点放在
cs\u lots
上,而如果在
cs\u lots\u历史记录
中找不到昵称,且
id
=
id\u lot
则结论在一列中为空。 可能吗

如果需要,请附带我的php代码…-:

$rows = array();
$res2 = mysql_query("SELECT cs_lots_history.*, cs_lots.id as csid, inv_id, inv_assets, inv_image, inv_color, inv_name, inv_rarity, inv_type, inv_price, price_ticket, places, now_places FROM cs_lots LEFT JOIN cs_lots_history ON cs_lots.id = cs_lots_history.id_lot WHERE active_lot='1' AND user_steamid='".$_SESSION['steamid']."' GROUP BY cs_lots.id") or die(mysql_error());
while($row = mysql_fetch_array($res2)) {
    $rows []= array(
        'id' => $row['csid'],
        'inv_id' => $row['inv_id'],
        'inv_assets' => $row['inv_assets'],
        'name' => $row['inv_name'],
        'inv_image' => $row['inv_image'],
        'inv_rarity' => $row['inv_rarity'],
        'inv_color' => $row['inv_color'],
        'inv_type' => $row['inv_type'],
        'inv_price' => $row['inv_price'],
        'price_ticket' => $row['price_ticket'],
        'maxUsers' => $row['places'],
        'nowUsers' => $row['now_places'],
        'my' => !empty($row['id_lot']) ? true : false   
    );
}

很难理解你在追求什么。我相信您希望查询返回cs_批次表中的所有记录,并指示客户是否使用历史记录表从该批次购买:

select cs_lots.id, count(h.id) from cs_lots left join cs_lots_history h
on cs_lots.id=h.id_lot and h.personaname='...'
where cs_lots.activelot=1 group by cs_slots.id
如果一个人没有买很多,那么计数将是0

如果您想要两个表中的全部记录,则不应使用group by:

select cs_lots.*, h.* from cs_lots left join cs_lots_history h on
cs_lots.id=h.id_lot and h.personaname='...' where cs_lots.activelot=1

这样,如果一个人没有出现在给定批次id的历史记录表中,历史记录表中的列将为空。

您的查询不起作用,我需要这样的查询结果,但使用WHERE personame。。。如果我使用+WHERE user_personame-我有这个结果,很难向您解释,但即使用户不购买-id也要显示该批次。。。结果不是6。。。需要12个结果,相同的计数
id
cs_lost
,即使用户不买这个,也只是一个空列Personame1。您在历史记录表的id字段中加入,而不是在id_lot字段2中加入。我给你提供了两个例子,你尝试了第一个,尽管你预期的结果与第二个更相似。你不应该像那样在查询中添加personaname字段,即使mysql允许你使用它的默认配置。非常感谢你的通知,但我不明白。。。我不明白你是什么意思,我提出了一个问题,现在我将尝试。。。