Php mySQL innerjoin与where条件不起作用

Php mySQL innerjoin与where条件不起作用,php,mysql,database,join,Php,Mysql,Database,Join,我试图获取过去几个小时mysql查询的结果,但没有得到。我希望你能帮助我 我有两张桌子。第一个表被称为“驱动器”,非常大,有200000多行30列,结构如下: plate | time from | time to ab222 | 2015.05.12 08:00 | 2015.05.13 11:37 cv481 | 2015.05.14 12:08 | 2015.05.14 14:11 第二个称为“燃料”,短得多,大约有5000行,但也有22列。其结构如下: plat

我试图获取过去几个小时mysql查询的结果,但没有得到。我希望你能帮助我

我有两张桌子。第一个表被称为“驱动器”,非常大,有200000多行30列,结构如下:

 plate | time from        | time to
 ab222 | 2015.05.12 08:00 | 2015.05.13 11:37
 cv481 | 2015.05.14 12:08 | 2015.05.14 14:11 
第二个称为“燃料”,短得多,大约有5000行,但也有22列。其结构如下:

 plate | time             | amount | price
 ab222 | 2015.05.13 09:22 | 2.3    | 32.22
 cv481 | 2015.05.14 13:59 | 12.2   | 17.7
我要做的是为“燃料”表中的每一行显示右侧的“驱动器”。这意味着“燃料”表的时间必须介于“驱动器”表的“从时间”和“到时间”之间,并且铭牌必须相同。结果应显示两个表的列(因此约52列5000行,因为“燃料”表中的每一行必须是“驱动”表中的一个装配驱动)

我不习惯使用mysql,所以我在谷歌上搜索了很多,尝试了很多。我所做的以下尝试似乎接近我所需要的:

INNER JOIN fuel.* ON
drives.plate = fuel.plate
WHERE fuel.time Between
drives.timefrom AND
drives.timeto
但它不起作用

*****更新*****

谢谢你迄今为止的帮助。我和一些淘气鬼玩了一会儿,发现了一种非常奇怪的行为。但首先你们是对的——我决定不使用“JOIN”,而是查询两个表并显示组合结果。这似乎是更好的解决办法

但现在问题来了。当我在phpMyAdmin中查询时,结果是正确的,它显示了一些匹配项。但是当我将同一个查询传输到php时,它显示了一个错误

下面是我连接数据库的方式。这很好:

$con = mysqli_connect("localhost","root","pass","test"); 
mysqli_options($init, MYSQLI_OPT_LOCAL_INFILE, true);    
以下是phpMyAdmin中的MySQL查询,它可以工作:

SELECT fuel.* , drives.* FROM fuel, drives WHERE fuel.plate = drives.PLATE 
AND fuel.time BETWEEN drives.time from AND drives.time to
在php中也是如此:

$con ­> query ("SELECT fuel.* , drives.* FROM fuel, drives WHERE fuel
plate = drives.PLATE AND fuel.time BETWEEN drives.time from AND 
drives.time to");
它在第一行的以下代码块中导致错误“警告:mysql_fetch_array()期望参数1为resource,boolean给定错误”:

<?php while($row=mysql_fetch_array($con))  {   ?>      <tr>      <td><p>
<?php echo $row['product_id']; ?></p></td>      <td><p>
<?php echo $row['product_name']; ?></p></td>      <td><p>
<?php echo $row['cat_name']; ?></p></td>      </tr>   <?php  } ?>   
不幸的是,我无法让我的查询和结果显示工作。对不起,打扰你了,你能告诉我有什么问题吗?非常感谢

*****工作溶液*****

我让它工作了。我的疑问是错误的。这是一份工作报告:

$blub = mysqli_query($con,"SELECT fuel.* , drives.* FROM fuel, drives 
WHERE fuel.plate = drives.PLATE AND fuel.time BETWEEN drives.time_from AND 
drives.time_to");
您的查询应该是

SELECT fuel.* FROM fuel 
INNER JOIN drives 
ON
drives.plate = fuel.plate
WHERE fuel.time Between
drives.timefrom AND
drives.timeto
改变

INNER JOIN fuel.* ON


您发布的SQL部分最明显的错误是在表名后面包含了
*

在MySQL中,添加/省略
internal
关键字对语句没有任何影响,即
a internal JOIN b
a JOIN b
同义

谓词可以出现在
ON
子句或
WHERE
子句中。假设谓词是两个表中列的比较,那么将它们分开有点奇怪,一个条件在
ON
子句中,另一个条件在
WHERE
子句中。数据库不关心这些条件是在
ON
子句中还是在
WHERE
子句中。但是,因为这两个条件似乎都是关于“匹配”行的,所以(对我来说)这两个条件都在
ON
子句中是有意义的

例如:

 SELECT drives.plate
      , drives.timefrom
      , drives.timeto
      , fuel.plate
      , fuel.time
      , fuel.amount
      , fuel.price
   FROM drives 
   JOIN fuel
     ON fuel.plate = drives.plate
    AND fuel.time BETWEEN drives.timefrom AND drives.timeto
跟进

Q:导致错误的查询

 SELECT fuel.* , drives.* FROM fuel, drives WHERE fuel.plate = drives.PLATE 
 AND fuel.time BETWEEN drives.time from AND drives.time to
A:您有虚假的空格,其中应该有一个没有空格的列名

              BETWEEN drives.time from AND drives.time to
                                 ^                    ^
如果列名中有空格,则需要将列名“转义”为反勾号:

              BETWEEN drives.`time from` AND drives.`time to` 
                             ^         ^            ^       ^ 
跟进

也许我之前的例子不够清楚

用JOIN关键字替换过时的逗号语法

已经是2015年了。现在是抛弃join操作的老式逗号语法,用更新的
join
关键字替换它的时候了。(将
JOIN
关键字称为“更新”是否仍然有效?)

将连接谓词从
WHERE
子句移动到
ON
子句

数据库并不真正关心;它与内部连接没有区别,谓词是谓词,谓词是谓词。但是我们通常在
ON
子句中放置指定如何“匹配”行的谓词,并在
WHERE
子句中放置过滤结果集的谓词

我们这样做的原因是,它使未来的读者更容易解读和理解这句话在做什么

不要使用。*在选择列表中,明确标识需要返回的表达式

表的名称。*
是方便的速记。但更好的做法是列出需要返回的列和表达式。我们经常发现
*
查询返回的列比实际需要的多

虽然您的******工作解决方案****中的查询可能有效,但它确实不太理想

  • 用关键字
    JOIN
    替换
    fuel
    drives
    之间的逗号
  • 将关键字
    WHERE
    替换为
    ON
  • 仅指定需要在选择列表中返回的列

不起作用意味着什么?它出错了还是怎么了?我相信它的
内部连接燃油开启了….
不需要
*
请提供一个完整的示例,说明您希望一行的外观like@Rahul当前位置它什么也没发生。马丁:当条件匹配时,结果应该是plate | time from | time to | plate | time | amount | price你在应该是columname
timefrom
的列中有一个虚假的空格。。。这里是驱动器之间的
。时间从
哦,是的,你说得对。我修好了。但是while循环中的错误“Warning:mysql_fetch_array()期望参数1是resource,boolean-given-error”仍然是相同的。关于该错误的问题被多次询问和回答。进行搜索。不推荐使用
mysql\uuz
接口。改用
mysqli
PDO
。检查查询执行的返回。如果
              BETWEEN drives.time from AND drives.time to
                                 ^                    ^
              BETWEEN drives.`time from` AND drives.`time to` 
                             ^         ^            ^       ^