sql >> Database teknologi >  >> RDS >> Mysql

MySQL VÆLG WHERE I LIST og IKKE I LIST i samme SQL

generere en outer join-erklæring, så 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

hvor ids er en underforespørgsel, der opregner alle værdierne, noget som dette:

$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"

sørg for at vælge ids.id , ikke table_live.id . På den måde vil id'erne altid vises, og modereringsdatoen kun, hvis den tilsvarende række findes i table_live.

En anden tilgang ville være at beholde forespørgslen, som du havde den, gemme resultatet i et array og derefter flette arrays i php, så du beholder alle nøgler, og kun udfylde værdierne, hvor nøglen matcher i begge arrays.

Jeg er ikke rigtig sikker på, hvilken slags db-bibliotek du bruger, så jeg ved ikke, hvordan man får en matrix af resultatsættet, men antag, at du ville have gemt rækkerne i et php-array ved at bruge en strengrepræsentation af id'et som nøgle, og datoen som værdi, så burde denne kode gøre tricket:

$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. JOIN vs. HVOR:Hvorfor udviser to forespørgsler, der opnår identiske resultater, en præstationsforskel på 3-4 størrelsesordener?

  2. GROUP BY-adfærd, når der ikke er nogen aggregerede funktioner i SELECT-udtrykket

  3. MySQL UPDATE tilføje data i kolonne

  4. Hvordan skriver man UTF-8-tegn ved hjælp af bulkinsert i SQL Server?