2015-09-25 4 views
0

Я начал работу над проектом, который создал кто-то другой, это то, что он сделал:
В таблице mySql у него есть поле ТЕКСТ, называемое allData, в этом поле он имеет последовательную форму записи, которые выглядят так PHP/Mysql: Поиск сериализованных данных для строки

a:13:{s:12:"currencyCode";s:3:"SEK";s:11:"senderEmail";s:18:”[email protected]"; 
s:4:"HASH";s:32:"ebdeb85d094cefd102b630fa9e69d9ca";} 

(Там намного больше данных, но я сократить его примерно на 95%, так что бы не испортить эту страницу)

Любая идея, как я могу найти приведенные выше данные для senderEmail или HASH?

+0

Вы пытаетесь искать электронную почту из нескольких строк, или вы просто нужно извлечь данные из одной строки? @Ryan – SalientGreen

+0

O рассмотрит возможность изменения структуры таблицы для подачи каждой информации –

+1

Если вы хотите найти эти конкретные поля в базе данных, вам будет лучше в долгосрочной перспективе хранить их в своих собственных соответствующих столбцах (возможно, дополнительно к сериализованным данным, хотя это будет зависеть от общего дизайна.) В противном случае вы получите [не совсем большие kludges] (http://stackoverflow.com/questions/24508164/how-do-i -Поиск-из-сериализации-поле-в-MySQL-базы данных). Конечно, любой другой способ будет медленнее, особенно для полей TEXT с большим количеством данных в них. –

ответ

2
SELECT * FROM table WHERE allData LIKE '%"[email protected]"%' AND allData LIKE '%"ebdeb85d094cefd102b630fa9e69d9ca"%' LIMIT 1;; 

Этот пример позволяет выполнить поиск конкретного HASH и SENDEREMAIL в таблице и возвращает эту запись, если совпадение обоих полей существуют в сериализованных данных. Это было бы полезно представить в виде, чтобы его можно было быстро и легко получить, и вы, конечно, можете увидеть, где вы хотите изменить адрес электронной почты и хэш в запросе. В этом примере он вернет эту точную запись.

Дополнительная информация:

MySQL Like Function

Search inside serialize data with MYSQL

+0

Если это была только одна строка, это не проблема, есть несколько сотен строк :( – Ryan

+0

@ Ryan вы ищете конкретную электронную почту или просто хотите, чтобы записи с этим шаблоном в ней? –

+0

Конкретная электронная почта или хеш. – Ryan

0

Вы можете получить данные в обычном режиме. Затем используйте unserialize, чтобы превратить его в массив, который вы можете искать.

+0

Любые объяснения для downvote? –

+0

Не мое голосование, но: Если вы это сделаете, вам не понадобится (реляционная), так как вы все равно передадите все данные «в» php-экземпляр. – VolkerK

+1

Есть сотни строк, а новые добавляются почти каждый день ... просто один раз один поиск займет много времени, не так ли? – Ryan

Смежные вопросы