Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Непростой вывод данных из sql
walters  
 ۩     Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 184
Пользователь №: 24757
На форуме: 6 лет, 1 месяц
Карма: 1




Есть запрос данных который обрабатываю через while

$res = mysqlQuery("SELECT * FROM `items`");

while($row = mysql_fetch_assoc($res))
{
echo $row['id'].' '.$row['name'];

}


в итоге я получаю список вида

1 vasia
2 fedea
3 anton

теперь вопрос:
есть вторая таблица

table2

со струкруторй

id - book - zaniato
1 - odin - 0
2 - dva - 0
3 - tri - 1
4 - chetire - 1
5 - piati - 0


моя задача при выводе первых данных из базы с именами, присвоить поочередно свободный id из второй таблицы (проверять по zaniato)

в конце у меня должно выйти

id | name | id iz table 2 в зависимости если (занято = 0)
1 vasia 1
2 fedea 2
3 anton 5
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4258
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 7 дней
Карма: 147




кроме как создать хранимку для этого больше че-то мыслей не приходит. пользовательская переменная в лимите не сработает (был такой вариант).
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walters  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 184
Пользователь №: 24757
На форуме: 6 лет, 1 месяц
Карма: 1




redreem какие варианты по реализации ?
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 121
Пользователь №: 42899
На форуме: 7 месяцев, 9 дней
Карма: 3




Цитата (walters @ 29.04.2016 - 16:05)
моя задача при выводе первых данных из базы с именами, присвоить поочередно свободный id из второй таблицы (проверять по zaniato)

правильно ли вопрос поставлен? Название темы сложный вопрос sql, а задача - "при выводе".
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4258
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 7 дней
Карма: 147




Цитата (walters @ 29.04.2016 - 17:54)
redreem какие варианты по реализации ?

а вот вроде работает так:

set @a = 0;
set @b = 0;
select
ii.id,
ii.name,
t2.td_t2
from (
select
i.id,
i.name,
@a:=@a+1 a
from items i
) ii
join (select id td_t2, @b:=@b+1 num from table2 t where t.zaniato = 0 order by t.id) t2 on t2.num = ii.a


какие варианты по реализации??? ну написать хранимку, которая будет делать выборку и отдавать результат
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walters  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 184
Пользователь №: 24757
На форуме: 6 лет, 1 месяц
Карма: 1




redreem спасибо это работает, но я думал как то на основе цикла это сделать, ибо возможно что там мест во второй таблице не будет для столько строк сколько есть в первой
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4258
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 7 дней
Карма: 147




Цитата (walters @ 29.04.2016 - 18:12)
redreem спасибо это работает, но я думал как то на основе цикла это сделать, ибо возможно что там мест во второй таблице не будет для столько строк сколько есть в первой

в цикле еще проще. писать лень уже. запрос было интересно собрать, а в цикле - элементарная логика.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walters  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 184
Пользователь №: 24757
На форуме: 6 лет, 1 месяц
Карма: 1




redreem
а как в запросе аргументировать значения set @a = 0;set @b = 0;
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4258
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 7 дней
Карма: 147




Цитата (walters @ 29.04.2016 - 18:20)
redreem
а как в запросе аргументировать значения set @a = 0;set @b = 0;

в смысле?
если запрос не проходит из пыха - можно просто убрать эти иницализации. оставить селект. нули по умолчанию присвоятся переменным.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walters  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 184
Пользователь №: 24757
На форуме: 6 лет, 1 месяц
Карма: 1




redreem
странно даже SELECT без сетов не работает даже в SQL тестере
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walters  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 184
Пользователь №: 24757
На форуме: 6 лет, 1 месяц
Карма: 1




Подскажите пожалуйста как реализовать это с помощю масива
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4258
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 7 дней
Карма: 147




погугли на предмет версий. у меня работает возможно потому, что версия свежее и поддерживает этот момент.

Цитата (walters @ 29.04.2016 - 18:12)
возможно что там мест во второй таблице не будет для столько строк сколько есть в первой


сделай вместо join, left join и если места не хватит, то вернется null в последнем столбце. или можно придумать что-то еще если нужно вместо нул.
так или иначе, если вопрос решается запросом, нет смысла городить циклы.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walters  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 184
Пользователь №: 24757
На форуме: 6 лет, 1 месяц
Карма: 1




redreem с SET-ом разобрался, но проблема в твоем ответе последнем, сейчас проверю left join
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4258
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 7 дней
Карма: 147




Цитата (walters @ 29.04.2016 - 19:22)
Подскажите пожалуйста как реализовать это с помощю масива

1. select table2, где занято = 0
2. поместить всю выборку в массив. например t2_arr
3. завести счетчик использованных записей из table2, например t2_cntr = 0;
4. при выгребании в цикле из item брать значение из t2_arr[t2_cntr++]['id']
всё.
если сложности с программированием, могу за 300 сделать.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4258
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 7 дней
Карма: 147




вообще, мне кажется, когда возникают такие задачи, то проблема в архитектуре БД. что-то там неверно спроектировано. ибо при верном проектировании все запросы получаются красивые и очевидные. а тут явно костыли надо городить.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса