Как выбрать ненулевые значения из таблицы mysql с помощью pdo в php? [Дубликат]

Обновление: с выпуском Cloud Functions для Firebase есть еще один элегантный способ сделать это, а также связывая Firebase с Algolia через функции . Компромисс здесь заключается в том, что функции / Algolia практически нулевое обслуживание, но, вероятно, при увеличении стоимости по сравнению с roll-your-own в узле.

В Firebase в настоящее время нет запросов на контент. Многие из наиболее распространенных сценариев поиска, такие как поиск по атрибуту, будут испечены в Firebase по мере расширения API.

Между тем, безусловно, возможно вырастить свои собственные. Тем не менее, поиск - это обширная тема (думаю, создание огромного хранилища данных в реальном времени), сильно заниженная и критическая особенность вашего приложения - не тот, который вы хотите сделать ad hoc или даже зависеть от кого-то вроде Firebase, чтобы предоставить от вашего имени , Поэтому обычно проще использовать масштабируемый сторонний инструмент для обработки индексирования, поиска, сопоставления тегов / шаблонов, нечеткой логики, взвешенных ранжировок и т. Д.

В блоге Firebase есть сообщение в блоге по индексированию с ElasticSearch , который описывает простой подход к интеграции быстрой, но чрезвычайно мощной поисковой системы в ваш сервер Firebase.

По сути, это делается в два этапа. Контролируйте данные и индексируйте их:

var Firebase = require('firebase');
var ElasticClient = require('elasticsearchclient')

// initialize our ElasticSearch API
var client = new ElasticClient({ host: 'localhost', port: 9200 });

// listen for changes to Firebase data
var fb = new Firebase('.firebaseio.com/widgets');
fb.on('child_added',   createOrUpdateIndex);
fb.on('child_changed', createOrUpdateIndex);
fb.on('child_removed', removeIndex);

function createOrUpdateIndex(snap) {
   client.index(this.index, this.type, snap.val(), snap.name())
     .on('data', function(data) { console.log('indexed ', snap.name()); })
     .on('error', function(err) { /* handle errors */ });
}

function removeIndex(snap) {
   client.deleteDocument(this.index, this.type, snap.name(), function(error, data) {
      if( error ) console.error('failed to delete', snap.name(), error);
      else console.log('deleted', snap.name());
   });
}

Запросите индекс, когда хотите выполнить поиск:


 
 

Есть пример, а сторонняя библиотека для упрощения интеграции здесь.

6
задан Hugo Zink 9 October 2015 в 08:54
поделиться

2 ответа

Вы не можете привязать «NOT NULL». Вы можете привязать только значения . «IS NOT NULL» не является значением, это совершенно другой синтаксис запроса. Вам просто нужно динамически строить запрос, привязка значения не может помочь вам в этом:

$query = 'SELECT ... WHERE ';
if (/* condition is NOT NULL */) {
    $query .= 'foo IS NOT NULL';
    $stmt = $db->prepare($query);
} else {
    $query .= 'foo = :foo';
    $stmt = $db->prepare($query);
    $stmt->bindValue('foo', $foo);
}
$stmt->execute();
7
ответ дан deceze 22 August 2018 в 07:40
поделиться
  • 1
    Хорошо, я предполагаю, что это успокаивает. Я думал, что это будет сложнее, чем было на самом деле. Спасибо за помощь. – Hugo Zink 9 October 2015 в 09:30

Боюсь, вы ошибаетесь в своем предположении. Хотя вы можете связать значения NULL в целом, оператор WHERE bar = NULL не вернет вам никаких строк, ни с помощью необработанного SQL, ни из PDO. Весь этот оператор будет вычисляться до NULL и не будет соответствовать ни одной строке.

Вместо этого вы можете использовать NULL-безопасный, равный оператору <=>, для соответствия полям, которые являются либо NULL, либо имеют некоторые стоимость. Но чтобы иметь значения, которые не равны нулю, вы все равно должны иметь другой запрос.

2
ответ дан Your Common Sense 22 August 2018 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: