Jump to content
  • 0

Вывести данные из mySQL


Zzz_
 Share

Question

Есть таблица

 

a   |   b   |   c
——————
q   |   d   |   1
b   |   d   |   0
d   |   1   |   1

 

Как вывести, значения b по порядку, только с учетом того, когда значение c = 0, вывести дополнительно значние a, где c =1, т.е:

 

d

d(q,d)

1

 

запос к БД сделать один раз.

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Если кому нибудь интересно, то вот решение

$result = mysql_query("SELECT * FROM test"); $result1 = $result;for ($i = 0; $i <= mysql_num_rows($result)-1; $i++){  if (!mysql_data_seek($result, $i)) {  continue; } if (!($row = mysql_fetch_assoc($result))) {  continue; }  for ($k = 0; $k <= mysql_num_rows($result1)-1; $k++){  if (!mysql_data_seek($result1, $k)) {   continue;  }  if (!($row1 = mysql_fetch_assoc($result))) {   continue;  }  if($row["c"] == 0){   if($row1["c"] == 1)   $a .= " ".$row1["a"].",";  } }  echo $row["b"].$a."<br />"; unset($a);}
Link to comment
Share on other sites

  • 0

Не могу создать тему из-за ошибки "

Not Acceptable

An appropriate representation of the requested resource /index.php could not be found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."

 

Поэтому напишу здесь —

 

Не могу понять,как правильно вставлять кавычки(скобки) в sql выражения?

Вот в данном случае все работает :

 

('SELECT * FROM '.$table.' WHERE id="$where"');// table вставлено с помощью конкатенации.// where просто со скобочками
 

 

Однако в попытке как-то "уравнять" запись обеих переменных :

('SELECT * FROM '.$table.' WHERE id='.$where.' ');// или('SELECT * FROM "$table" WHERE id="$where" ' );
Ничего не выходит. Как все-таки надо оформлять переменные в запросе?
Edited by Hoax
Link to comment
Share on other sites

  • 0

Значения MySQL обрамляются одинарнымиили двойными прямыми кавычками (там где буква Э), а имена полей, алиасов и прочего одинарными косыми кавычками (там где буква Ё). На мой взгляд, правильнее всего будет всё-таки использовать конкатенацию, чтобы не запариваться за кавычки в PHP.
 

$db->query('SELECT * FROM `'.$table.'` WHERE `id`="'.$where'."');
Link to comment
Share on other sites

  • 0
$db->query('SELECT * FROM `'.$table.'` WHERE `id`="'.$where'."');

 

опечатка в конце, оператор конкатенации должен быть перед одиночной кавычкой:

$db->query('SELECT * FROM `'.$table.'` WHERE `id`="'.$where.'"');

 

Ничего не выходит. Как все-таки надо оформлять переменные в запросе?

 

читайте про способы задания значений строковым переменным http://www.php.su/learnphp/datatypes/?string#single

Если вы этого ещё не знаете, то мне кажется рановато пытаться разбираться с запросами к базе данных.

Link to comment
Share on other sites

  • 0

СПАСИБО огромное всем!!!

но я имел в виду, что сделать один запрос к бд, вернуть массив (mysql_fetch_array)

и уже массив в цикле do while вывести

но

 

 

 

 

когда значение c = 0, вывести дополнительно значние a, где c =1, т.е:

Link to comment
Share on other sites

  • 0

Ну а что такого? Берёте из БД всё, получаете в массив и потом форичите его. Типа такого

$query = $db->query("SELECT * FROM `tablename`");$result = $query->fetch(PDO::FETCH_ASSOC);foreach ($result as $row){    echo $row['b'].' '.$row['c'] == 1 ? $row['a'] : '';}
  • Like 1
Link to comment
Share on other sites

  • 0
Стоит ли значение id заключать в кавычки, при условии что там цифровое значение а не строка? (напри. id=2)

Нет, это совершенно не обязательно. Числовые значения работают как с кавычками, так и без при условии числового типа поля.

Link to comment
Share on other sites

  • 0

 

Ну а что такого? Берёте из БД всё, получаете в массив и потом форичите его. Типа такого

$query = $db->query("SELECT * FROM `tablename`");$result = $query->fetch(PDO::FETCH_ASSOC);foreach ($result as $row){    echo $row['b'].' '.$row['c'] == 1 ? $row['a'] : '';}

Стоп стоп стоп

я забыл, вот в чем главный вопрос же был

когда с = 0 вывести ВСЕ значения а, где с = 1,

а оно равно 1 в двух местах

Link to comment
Share on other sites

  • 0
когда с = 0 вывести ВСЕ значения а, где с = 1,

Вы меня извините конечно, но вы объясняете так что нифига не понятно что же вы хотите в итоге. Изъясняйтесь понятно или блок схему нарисуйте если уж словами не можете.

 

Вообще судя из первого поста то выводиться у вас должны значения в независимости от того с =1 или с = 0, просто в случае одного из вариантов должны выбираться дополнительные поля. Я вас разочарую нельзя в одной выборке выбирать записи с разным количеством столбцов, но можно заменять отсутствующие значения к примеру значением null

 

Как я понял вам нужно вывести значения b если с = 0

SELECT b FROM test WHERE c = 0

но в случае если с = 1 нужно вывести еще и значения столбца a

 

тогда

SELECT b, a FROM test WHERE c IN (0,1)

и UNION тут не нужен, если требуется заполнить a нулем если  с != 1

SELECT b, IF(c = 1,a,NULL) AS a FROM test WHERE c IN (0,1) ORDER BY a ASC

Кстати сказать если у вас c может иметь только 2 значения 0 или 1, то и вот эта часть

 WHERE c IN (0,1)

то же лишняя.

  • Like 1
Link to comment
Share on other sites

  • 0
у вас должны значения в независимости от того с =1 или с = 0, просто в случае одного из вариантов должны выбираться дополнительные поля

все верно, но еще не вся суть, мне нужно в цикле, как правильно меня понял Veseloff, вывести весь запрос попрядку, но он не учел Вашего примечания, можно конечно как только доходит до значения с = 0 делать заново запрос к бд, но вот этого я и не хочу, как можно обойти?

ведь это сильно нагружает сервер?

Link to comment
Share on other sites

  • 0
все верно, но еще не вся суть, мне нужно в цикле, как правильно меня понял Veseloff, вывести весь запрос попрядку, но он не учел Вашего примечания, можно конечно как только доходит до значения с = 0 делать заново запрос к бд, но вот этого я и не хочу, как можно обойти? ведь это сильно нагружает сервер?

 

я вам написал запрос где будет сделана выборка всех полей с с =  0 и с = 1, там где поле 'а' не нужно его значение будет равно null. что вам мешает сделать

if($row['a']){...}
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy