2015-03-26 3 views
1

Я пытаюсь получить значения из моей таблицы usermeta в зависимости от определенной провансальности. Я живу в Нидерландах. Здесь у нас 12 проспектов, и я хочу выбрать всех пользователей, которые живут в определенной провинции. Поэтому я добавил поле в пользовательскую базу данных с именем «provincies». Кнопка со значением <a href="results.php?provincie=provencename" говорит мне, кто должен выбрать, исходя из значения из URL-адреса.PHP/MySql поиск одного значения в массиве

Это не сложно. Проблема в том, что пользователи могут иметь несколько профайлов.
Так поля meta_key provincie удерживайте meta_value friesland','groningen','drenthe'

Так что теперь мне нужно искать, если добавленная стоимость от URL находится в meta_value базы данных.

$provincie_array = "friesland','groningen','drenthe"; 
$query = "SELECT * 
      FROM $wpdb->usermeta 
      WHERE meta_key='provincie' 
      AND meta_value IN ('".$provincie_array."')"; 

Я думаю, что это правильно. Однако PHP и MySql просят различать.

Может ли кто-нибудь увидеть, что мне здесь не хватает?

-EDIT-

$provincie = $_GET['provincie']; 
       global $wpdb; 
       //$query = "SELECT * FROM $wpdb->usermeta WHERE meta_key='provincie' AND meta_value IN ('".$provincie_array."')"; 

$provincie_array = array('friesland','groningen','drenthe','noordholland','flevoland','overijssel','zuidholland','utrecht','gelderland','zeeland','noordbrabant','limburg'); 
$provincie_check = ''; 
foreach ($provincie_array as $value) { 
    $provincie_check[]="`meta_value` LIKE '%[{$value}]%'"; 
} 
$query = "SELECT * 
      FROM $wpdb->usermeta 
      WHERE meta_key='provincie' 
      AND (".implode(' OR ',$provincie_check).")"; 
      $personen = $wpdb->get_results($query); 
+4

Последнее опаляться цитата из слова Дренте, в $ provincie_array не должно быть там. –

+0

Истина, опечатка, потому что список длиннее. Однако проблема все еще существует :-) – Interactive

+0

@MySQLRockstar Начальные и конечные кавычки находятся в функции 'IN' – Interactive

ответ

3

Это будет работать ... :)

Для @Interactive: Вы можете установить $ find_provincie = $ _GET [ 'Provincie']; вот и все.

$find_provincie = 'groningen'; //look for 1 
$find_provincie = array('friesland','groningen'); //look for multiple 


if(is_array($find_provincie)){ 
    $provincie_check = ''; 
    foreach ($find_provincie as $value) { 
     $provincie_check[]="`meta_value` LIKE '%[{$value}]%'"; 
    } 
    $provincie_check=implode(' OR ',$provincie_check); 
}else{ 
    $provincie_check = "`meta_value` LIKE '%[{$find_provincie}]%'"; 
} 

$query = "SELECT * FROM usermeta WHERE meta_key='provincie' AND (".$provincie_check.")"; 

Протестирован и работает, если вы храните каждый элемент в скобках, как: [Гронинген] [Дренте]

+0

Нет, нет.Неважно, где я нажимаю, я всегда вижу одного и того же человека. – Interactive

+0

Это действительно работает. Протестировано в местной среде: http://s2.postimg.org/h0269r42x/Screen_Shot_20150326160332.png проверить код: может быть, это тот же человек, потому что вы проверяете только одну возвращенную строку, а не foreach'ing их всех? – TrueSkillZ

+0

Вы не правильно поняли мой вопрос. У вас есть все пронументы в другой строке, в то время как у меня есть несколько доказательств в одной таблице. И я использую цикл for, чтобы получить их все :-) – Interactive

0

попробовать с этим:

$provincie_array = array("friesland","groningen","drenthe"); 
$query = "SELECT * 
     FROM $wpdb->usermeta 
     WHERE meta_key='provincie' 
     AND meta_value IN ('".implode(",", $provincie_array)."')"; 
+0

Немного объяснений было бы полезно. В чем была проблема и что вы сделали для ее решения? – showdev

0

Я думаю, что ваша sstructure базы данных не является идеальной. Если вы сохраняете несколько значений в поле, вам нужно найти строку.

Попробуйте использовать «похожие» утверждения (не самые лучшие, а не самые быстрые), но хорошо в вашем случае, если вы не решите изменить структуру базы данных.

ваш запрос должен выглядеть следующим образом:

$query = "SELECT * 
      FROM $wpdb->usermeta 
      WHERE meta_key='provincie' 
      AND (
       meta_value LIKE '%friesland%' 
       OR meta_value LIKE '%groningen%' 
       OR meta_value LIKE '%drenthe%' 
     )"; 

Так что в PHP вы должны сделать что-то вроде этого:

$provincie_array = array('friesland','groningen','drenthe'); 

$querypart = "meta_value LIKE '%".implode("%' OR meta_value LIKE '%", $provincie_array)."%'"; 

$query = "SELECT * 
      FROM $wpdb->usermeta 
      WHERE 
      meta_key='provincie' 
      AND (".$querypart.")"; 
+0

Не повезло. Все равно дает мне одного человека, независимо от прованса. Ховер, я не изменил базу данных, что то же самое, что и '$ provincie_array' – Interactive

+0

Привет, я обновил ответ – Federico

+0

Было бы огромной проблемой то, что в провинциях есть похожие приятели или подражатели. Допустим, у вас есть «drenthe» и «drentheng»: если вы ищете «drenthe», вы найдете «drenthe» и «drentheng». Я не думаю, что это проблема для @Interactive, но этот метод имеет огромную ошибку. Вы могли видеть мой ответ о том, как сделать это без такой ошибки. – TrueSkillZ

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