sql >> Databasteknik >  >> RDS >> Mysql

MySQL SELECT WHERE I LIST och NOT I LIST i samma SQL

generera en yttre join-sats så att du får:

SELECT ids.id, table_live.moderation_date
FROM (select 1 id union all select 2 union all ....) ids
LEFT JOIN table_live
ON ids.id = table_live.id

där ids är en underfråga som räknar upp alla värden, ungefär så här:

$ids = '1,2,3,4,5'
$subquery = 'select '.str_replace(',', ' id union all select ', $ids).''
$sql = "SELECT ids.id, table_live.moderation_date
FROM ($subquery) ids
LEFT JOIN table_live
ON ids.id = table_live.id"

var noga med att välja ids.id , inte table_live.id . På så sätt kommer ID:n alltid att visas och modereringsdatumet endast om motsvarande rad finns i table_live.

Ett annat tillvägagångssätt skulle vara att behålla frågan som du hade den, lagra resultatet i en array och sedan slå samman arrayerna i php så att du behåller alla nycklar, och fylla i värdena endast där nyckeln matchar i båda arrayerna.

Jag är inte riktigt säker på vilken typ av db-bibliotek du använder så jag vet inte hur man skaffar en array av resultatuppsättningen, men anta att du skulle ha lagrat raderna i en php-array, med en strängrepresentation av id:t som nyckel och datumet som värde, då borde den här koden göra susen:

$items = array(
    '1' => NULL
,   '2' => NULL
,   ...
); 
//note: use string keys in order to merge!!
$result = array_merge($items, $resultset);

se:http://php.net/manual/en/function.array -merge.php




  1. PHP 7.2.2 + mysql 8.0 PDO ger:autentiseringsmetod okänd för klienten [caching_sha2_password]

  2. Hur man delar upp frågefönster i SQL Server Management Studio (SSMS) - SQL Server / TSQL självstudie del 13

  3. Hur ber jag om hjälp med att optimera och fixa frågor i MySQL?

  4. Revisionsloggning för PostgreSQL