Не запрашивайте вашу базу данных внутри цикла, если вам абсолютно не нужно.
Каждый раз, когда вы запрашиваете базу данных, вы используете дисковый ввод-вывод, чтобы прочитать базу данных и вернуть вашу запись. Дисковый ввод-вывод является самым медленным чтением на компьютере и будет массивным узким местом для вашего приложения.
Если вы выполняете более крупные запросы заранее или, по крайней мере, вне цикла, вы будете реже ударить по диску, что повысит производительность. Ваши результаты более крупных запросов будут храниться в памяти, что значительно быстрее, чем чтение с диска.
Теперь, с этим предупреждением, давайте рассмотрим вашу актуальную проблему:
Похоже, вы пытаетесь получить записи из artWork
, где пользователь является основным исполнителем или пользователь был одним из нескольких исполнителей для работы над групповым проектом. artWork
, кажется, содержит идентификатор основного художника в проекте, тогда как shareWork
, вероятно, является своего рода таблицей поиска "многие ко многим", которая связывает идентификаторы пользователей со всеми художественными проектами, частью которых они были.
Первое, что я должен спросить: нужен ли вам первый запрос к artWork
или если основной художник должен иметь запись для этого art_id в shareWork
, так как он вообще работал над проектом.
Если вам не нужен первый поиск, тогда запрос становится очень простым: просто возьмите всех пользователей art_id
s из таблицы shareWork
и используйте это для поиска его записей в основной artWork
таблица:
SELECT artWork.*
FROM artWork
WHERE art_id IN
(SELECT art_id
FROM shareWork
WHERE user_id = $user)
Если вам нужно сделать в обеих таблицах, просто добавьте проверку в запросе выше, чтобы также проверить этого пользователя в таблице artWork
:
SELECT artWork.*
FROM artWork
WHERE
user_id = $user
OR art_id IN
(SELECT art_id
FROM shareWork
WHERE user_id = $user)
Это даст вам все artWork
записей в одном запросе, а не ... ну, много запросов, и вы можете сделать mysql_fetch_array
цикл по результатам этого одного запроса. и покончим с этим.