2014-01-12 1 views
0

Я хочу, чтобы этот 2 запроса был как один, так что 1, когда я запускаю его, получает 1 строку со всеми данными, называемыми ontvanger. Этот код ниже не работает, но я попробовал много разных , поэтому мне было интересно, могу ли я помочь с этим.MySQL returing 1 строка с 2 операторами

$getBuddies = dbquery("select sender AS ontvanger FROM messenger_friendships WHERE receiver = '30'"); 
$getBuddies2 = dbquery("select receiver AS ontvanger FROM messenger_friendships WHERE sender = '30'"); 

     $i = 0; 

     while ($buddy = mysql_fetch_assoc($getBuddies, $getBuddies2)); 

Исправление благодаря ErichBSchulz

case 'recipients': 

    echo '/*-secure-' . LB; 
    echo '['; 


    $getBuddies = dbquery("select sender AS ontvanger FROM messenger_friendships WHERE receiver = '" . USER_ID . "' 
          UNION select receiver AS ontvanger FROM messenger_friendships WHERE sender = '" . USER_ID . "'"); $i = 0; 

    while ($buddy = mysql_fetch_assoc($getBuddies)) 
    { 
     if ($i > 0) 
     { 
      echo ','; 
     } 

     echo '{"id":' . $buddy['ontvanger'] . ',"name":"' . clean($users->id2name($buddy['ontvanger'])) . '"}'; 

     $i++; 
    } 
+0

Вы не можете просто создавать новые способы вызова функции. Если он говорит, что он принимает один запрос, вы не можете вызвать его с двумя запросами и ожидать, что он волшебным образом выяснит, чего вы хотите. – Barmar

+0

Что вы хотите, чтобы результат выглядел? Как вы хотите, чтобы два набора результатов были объединены в одну строку? Что делать, если каждый запрос возвращает более 1 строки? – Barmar

ответ

0

вы хотите что-то вроде:

$getBuddies = dbquery(
"select sender AS ontvanger FROM messenger_friendships WHERE receiver = '30' 
UNION select receiver AS ontvanger FROM messenger_friendships WHERE sender = '30'"); 

редактировать:, конечно, вы также можете сделать это:

$getBuddies = dbquery(
"select if(sender = '30', receiver, sender) AS ontvanger 
FROM messenger_friendships 
WHERE receiver = '30' OR sender = '30'"); 

Но Barmar указывает на то, как эти запросы будут возвращать несколько строк - но чтение между линиями, которые я предполагаю, это то, что вы на самом деле после.

Тогда приятная вещь о первом запросе - это удаление дубликатов.

+2

Это вернет 2 строки, а не 1 строку. – Barmar

+1

Это сделало это красиво. спасибо за очень быструю помощь помощник;) –

3
SELECT sender,receiver FROM messenger_friendships WHERE receiver = '30' OR sender = '30' 

Это вернет 1 строку со всеми соответствующими данными до тех пор, пока не несколько строк с '30'. Если это так, вы можете использовать GROUP_CONCAT() и получить все результаты, возвращенные в виде строки в 1 строке, если теперь вам нужно получить только 1 строку, возвращаемую запросом.

+0

Фактически есть несколько строк с одинаковыми данными. поэтому этот я уже пробовал, но он дает мне двойные данные. –

+0

Если у вас избыточное количество данных, вы можете использовать GROUP BY – NewInTheBusiness

+0

, исправление ErichBSchulz сделало трюк. –

0

Mysql не разрешает несколько запросов. С другой стороны, Mysqli предлагает возможность включить multiple queries.

+0

ведь с союзом его возможно? –

+0

Да, конечно. Я думаю, что в вашем случае союз - это путь. Для этого вы не хотите менять mysqli. Но вы должны подумать об изменении, поскольку mysql устарел в php 5.5. –

+0

В данный момент мы используем MariaDB, и мы используем php 5.3, наши скрипты не будут поддерживать 5.4 или выше. но спасибо за хэдз-ап ';) оценил –

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