Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL WYBIERZ GDZIE NA LIŚCIE i NIE NA LIŚCIE w tym samym SQL

wygeneruj zewnętrzną instrukcję join, aby uzyskać:

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

gdzie ids to podzapytanie wyliczające wszystkie wartości, coś takiego:

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

pamiętaj, aby wybrać ids.id , a nie table_live.id . W ten sposób identyfikatory będą zawsze wyświetlane, a data moderacji tylko wtedy, gdy odpowiedni wiersz istnieje w table_live.

Innym podejściem byłoby zachowanie zapytania w takim stanie, w jakim było, zapisanie wyniku w tablicy, a następnie scalenie tablic w php, tak aby zachować wszystkie klucze i wypełnić wartości tylko tam, gdzie klucz pasuje w obu tablicach.

Nie jestem do końca pewien, jakiego rodzaju biblioteki db używasz, więc nie wiem, jak uzyskać tablicę zestawu wyników, ale załóżmy, że zapisałeś wiersze w tablicy php, używając ciągu reprezentującego identyfikator jako klucz, a data jako wartość, to ten kod powinien załatwić sprawę:

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

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz się ze zdalną bazą danych MySQL za pomocą VB.NET 2010

  2. za pomocą mysql_close()

  3. UPUŚĆ TABELĘ, JEŚLI ISTNIEJE w MySQL

  4. Wyszukiwanie podobnych wzorców liczbowych w tabeli

  5. WSTAW ... NA DUPLIKOWANY KLUCZ (nic nie rób)