SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.11.2009 12:03:23

Константин_Домнин
Участник
Зарегистрирован: 01.11.2009
Сообщений: 2

Вывод названия поля с определенным значением

Есть таблица успеваемости us с полями matematika, fizika, istoriya ...и т.д
Небходимо вывести название поля для тех записей, где в каком-то одном поле значение равно 3, и в то же время в остальных полях больше 3.
Подскажите пожалуйста!

Неактивен

 

#2 01.11.2009 23:17:46

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Вывод названия поля с определенным значением

Не очень удачная реализация таблицы — в случае, когда у человека нет оценки по
соответствующему предмету, — приходится ставить NULL. А при добавлении нового
предмета — приходится обновлять все строки таблицы, тоже не очень хорошо.

Ну и из-за такой реализации прийдется писать сложную конструкцию для выборки:

SELECT * FROM tablename WHERE
(fizika = 3 AND istoriya > 3 AND ... ) OR
(fizika > 3 AND istoriya = 3 AND ... ) OR
...

Неактивен

 

#3 02.11.2009 09:13:48

Константин_Домнин
Участник
Зарегистрирован: 01.11.2009
Сообщений: 2

Re: Вывод названия поля с определенным значением

Да я вобщем так и сделал  (тупо) :
$sql7 = mysql_query("SELECT * FROM us1 where (
(klass='$usklass')and

(((rus=3)and (liter>3) and(matem>3) and (okr_mir>3) and(musika>3) and(iso>3) and (techn>3) and(fizra>3))
or
((liter=3)and (rus>3) and(matem>3) and (okr_mir>3) and(musika>3) and(iso>3) and (techn>3) and(fizra>3))
or
((rus>3)and (liter>3) and(matem=3) and (okr_mir>3) and(musika>3) and(iso>3) and (techn>3) and(fizra>3))
or
((rus>3)and (liter>3) and(matem>3) and (okr_mir=3) and(musika>3) and(iso>3) and (techn>3) and(fizra>3))
or
((rus>3)and (liter>3) and(matem>3) and (okr_mir>3) and(musika=3) and(iso>3) and (techn>3) and(fizra>3))
or
((rus>3)and (liter>3) and(matem>3) and (okr_mir>3) and(musika>3) and(iso=3) and (techn>3) and(fizra>3))
or
((rus>3)and (liter>3) and(matem>3) and (okr_mir>3) and(musika>3) and(iso>3) and (techn=3) and(fizra>3))
or
((rus>3)and (liter>3) and(matem>3) and (okr_mir>3) and(musika>3) and(iso>3) and (techn>3) and(fizra=3)))
)
order by fam" ,$db);
$res7 = @mysql_num_rows($sql7);

а потом из асс массива циклом вывожу то, что надо..
while ($tablerows = mysql_fetch_row($sql7))
{вывод нужного...- в смысле значения полей
===
но надо вывести не ЗНАЧЕНИЕ ПОЛЯ, а имено НАЗВАНИЕ ПОЛЯ у записи, где есть только одна тройка, а остальные - четверки и пятерки.
Похоже не сделать так...а переделывать структуры базы - это все снова...неохот

======
Получилось через пхп smile)
(конечно через жоп... , но работает)

1) объявил массив, в который занес названия полей:

# Поля предметов в таблице начанаются с номера 4
$p=array(
4 => "русский",
5 => "литература",
6 => "математика",
7 => "окр_мир",
8 => "музыка",
9 => "ИЗО",
10 => "Технология",
11 => "Физкультура"
);
2) проверяю значения полей, и если значение поля == 3 , то вывожу p[i]:

while ($tablerows = mysql_fetch_row($sql7))
{
for ($i = 4; $i <= 11; $i++)
{
if ($tablerows[i]==3)
{
echo "$p[i]";
}
}
}

правда что-то цикл не работает, поэтому пришлось по тупому:

if ($tablerows[4]=="3")
{echo " ($p[4]) ";}
if ($tablerows[5]=="3")
{echo " ($p[5]) ";}
и т.д.

====
ВСЕМ СПАСИБО!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson