MySQL-запрос выводит только нечетные строки - PullRequest
3 голосов
/ 03 февраля 2010

У меня есть следующий метод PHP, который возвращает строку JSON из запроса MySQL:

$sys_words_ref_join_query = mysql_query("
 SELECT user_words.*, sys_words.*
 FROM user_words, sys_words
 WHERE user_words.sys_words_ref = sys_words.sys_words_ref 
 & user_words.user_info_ref = '1'
 LIMIT 0, 7
");

$json_array = array();

while($words_obj = mysql_fetch_object($sys_words_ref_join_query)) {
 $json_array[] = $words_obj;
}

$result = json_encode($json_array);

echo $result;

У меня проблема в том, что $result отображает только нечетные строки БД, например. 1,3,5 ... и т. Д.

Есть идеи, почему? Спасибо.

Ответы [ 4 ]

8 голосов
/ 03 февраля 2010

Вы, вероятно, должны использовать Логическое И (AND) вместо Побитовое И (&) в предложении where:

WHERE user_words.sys_words_ref = sys_words.sys_words_ref 
 AND user_words.user_info_ref = '1'
1 голос
/ 03 февраля 2010

Это условие:

user_words.sys_words_ref = sys_words.sys_words_ref & user_words.user_info_ref = 1

подразумевает побитовое AND между sys_words.sys_words_ref и user_words.user_info_ref, что позже сравнивается с user_words.sys_words_ref

Таким образом, вы получаете только строки сuser_words.sys_words_ref соответствует поразрядному AND между этими двумя полями, что, вероятно, верно только для нечетных строк (с последним установленным битом).

0 голосов
/ 03 февраля 2010

Строки в реляционной базе данных не имеют внешнего порядка, следовательно, не имеют номеров строк. СУБД может использовать любой внутренний порядок, какой пожелают разработчики. Если вы хотите заказать, вы должны явно указать его с помощью ORDER BY предложения.

0 голосов
/ 03 февраля 2010

Вы запускали функцию mysql_query ? Я не могу видеть там. Также попробуйте повторить это:

print '<pre>';
print_r ($result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...