Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用两个不同表的输入从一个表中获取值_Php_Mysql - Fatal编程技术网

Php 使用两个不同表的输入从一个表中获取值

Php 使用两个不同表的输入从一个表中获取值,php,mysql,Php,Mysql,我有两个专栏: 1.座位已满。座位号是自动递增的 seat_id seat type 1 1 1 2 2 1 3 3 1 4 7 2 .. .. .. 二,日期座位 id date_booked seat_id user_id 1 2016-5-12 4 2 2 2016-5-14 5 3 .. .. ..

我有两个专栏:

1.
座位
已满。座位号是自动递增的

seat_id seat type
1       1     1
2       2     1
3       3     1
4       7     2
..     ..     ..
二,<代码>日期座位

id  date_booked  seat_id  user_id
1    2016-5-12     4       2
2    2016-5-14     5       3
..    ..           ..      ..
我想从给定的类型和日期中选择座位。e、 g如果类型为2,日期为2016年5月12日。我想选择除7号以外的所有2号座位。因为座位号4即座位号7在2016年5月12日已经存在

我尝试的是:

$type=$_POST['type'];
$flightdate=$_POST['flightdate'];
$sql ="SELECT seat, seat_id FROM seat INNER JOIN `date-seat` ON seat.seat_id=`date-seat`.seat_id WHERE `date-seat`.date_booked<>$flightdate AND seat.type=$type";
$type=$\u POST['type'];
$flightdate=$_POST['flightdate'];
$sql=“从座椅内部连接中选择座椅,座椅id在座椅上连接'date seat'。座椅id='date seat`。座椅id在'date seat`。date seat`。预订日期$flightdate和座椅。type=$type”;

这个sql给我的座位与您预定的日期不匹配。i、 e.如果我选择类型2和日期2016-5-12。它只提供座位号为5的座位。但是我想要除了4号座位以外的所有座位。希望您能理解。

有几种不同的方法可以做到这一点。这里有一个
不存在的

select *
from seat s
where not exists (
    select 1
    from dateseat ds 
    where ds.date_booked = '2016-5-12' and ds.seat_id = s.seat_id
)
请尝试以下查询:

SELECT * FROM date-seat ds 
RIGHT OUTER JOIN 
seat s ON ds.seat_id=s.seat_id
WHERE 
    ds.seat_id IS NULL 
应用过滤器的其余部分

我希望您的rdbms支持外部联接。

解决方案#1(使用
不存在
):

SELECT 
*
FROM seat S 
WHERE NOT EXISTS(
   SELECT 1
   FROM `date-seat` DS
   WHERE DS.seat_id = S.seat_id
   AND DS.date_booked ='2016-05-12'
)
AND S.type = 2;
SELECT 
S.*
FROM seat S 
LEFT JOIN `date-seat` DS 
ON S.seat_id = DS.seat_id AND DS.date_booked = '2016-05-12'
WHERE S.type = 2 AND DS.seat_id IS NULL;
SELECT 
*
FROM seat S
WHERE S.seat_id NOT IN (
      SELECT DS.seat_id
      FROM `date-seat` DS 
      WHERE DS.date_booked = '2016-05-12'
    )
AND S.type = 2;

解决方案#2(使用
左连接
为空
):

SELECT 
*
FROM seat S 
WHERE NOT EXISTS(
   SELECT 1
   FROM `date-seat` DS
   WHERE DS.seat_id = S.seat_id
   AND DS.date_booked ='2016-05-12'
)
AND S.type = 2;
SELECT 
S.*
FROM seat S 
LEFT JOIN `date-seat` DS 
ON S.seat_id = DS.seat_id AND DS.date_booked = '2016-05-12'
WHERE S.type = 2 AND DS.seat_id IS NULL;
SELECT 
*
FROM seat S
WHERE S.seat_id NOT IN (
      SELECT DS.seat_id
      FROM `date-seat` DS 
      WHERE DS.date_booked = '2016-05-12'
    )
AND S.type = 2;

解决方案#3(使用
不在
中):

SELECT 
*
FROM seat S 
WHERE NOT EXISTS(
   SELECT 1
   FROM `date-seat` DS
   WHERE DS.seat_id = S.seat_id
   AND DS.date_booked ='2016-05-12'
)
AND S.type = 2;
SELECT 
S.*
FROM seat S 
LEFT JOIN `date-seat` DS 
ON S.seat_id = DS.seat_id AND DS.date_booked = '2016-05-12'
WHERE S.type = 2 AND DS.seat_id IS NULL;
SELECT 
*
FROM seat S
WHERE S.seat_id NOT IN (
      SELECT DS.seat_id
      FROM `date-seat` DS 
      WHERE DS.date_booked = '2016-05-12'
    )
AND S.type = 2;


以防您无法访问sql FIDLE