PHP: используйте массив в select, где условие [duplicate]

Теперь вы можете добавлять / использовать экземпляры с помощью метода

public class Myprogram7 {

  Scanner scan;
  int compareCount = 0;
  int low = 0;
  int high = 0;
  int mid = 0;  
  int key = 0;  
  Scanner temp;  
  int[]list;  
  String menu, outputString;  
  int option = 1;  
  boolean found = false;  

  private void readLine() {

  }

  private void findkey() {

  }

  private void printCount() {

  }
  public static void main(String[] args){

    Myprogram7 myprg=new Myprogram7();
    myprg.readLine();
    myprg.findkey();
    myprg.printCount();
  }
}
0
задан user96828 9 July 2009 в 04:11
поделиться

4 ответа

Второй запрос должен использовать $thelist не $row, и он должен быть вне цикла while. Цикл foreach не нужен при обработке одной строки. Вы можете получить доступ к имени в $row с помощью простого $row[0]. Что-то вроде этого (untested):

$query1 = "SELECT name FROM clients WHERE sector = '$sectorlink'";
$clientresult = mysql_query($query1, $connection) or trigger_error("SQL", E_USER_ERROR);

while($row = mysql_fetch_array($clientresult)){
    $temp[] = '"'.$row[0].'"';
}

$thelist = implode(",",$temp);
$query = "SELECT count(*) FROM studies WHERE client IN ($thelist) ORDER BY (date) desc";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);

Внимание! Помните, что ваш код очень уязвим для SQL-инъекций . Это нормально для тестирования или внутреннего развития, но если этот код будет работать на веб-сайте Fort Knox, вы захотите его исправить совсем немного. Просто FYI. : -)

5
ответ дан John Kugelman 25 August 2018 в 04:33
поделиться
  • 1
    Потрясающие! Большое вам спасибо. Да, мне нужно будет исправить код против инъекций, спасибо за напоминание. – user96828 9 July 2009 в 04:30
  • 2
    Постскриптум Вы также можете сделать это в одном запросе с подвыборкой: SELECT count(*) FROM studies WHERE client IN (SELECT name FROM clients WHERE sector = '$sectorlink') ORDER BY (date) desc. – John Kugelman 9 July 2009 в 04:35

Я ожидаю, что вам будет лучше сделать это в одном запросе с соединением:

$query = "SELECT COUNT(*)  FROM `studies` INNER JOIN `clients` on studies.client = clients.name WHERE clients.sector = '$sectorlink' ORDER BY studies.date DESC";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);
0
ответ дан acrosman 25 August 2018 в 04:33
поделиться

Попробуйте это:

$query1 = "SELECT name FROM clients WHERE sector = '$sectorlink'";
$clientresult = mysql_query($query1, $connection) or trigger_error("SQL", E_USER_ERROR);

while($row = mysql_fetch_array($clientresult)){

$client = $row['name'];

$query = "SELECT * FROM studies WHERE client='$client' ORDER BY date DESC";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);

/* echo results here */

}
0
ответ дан Chris Bier 25 August 2018 в 04:33
поделиться

Пара вещей. Сначала у вас есть ненужный цикл. Попробуйте:

while (list($name) = mysql_fetch_row($clientresult)) {

    $temp[] = $name;
}

Чтобы создать свой временный массив.

Во-вторых, части предложения IN являются строками, поэтому, когда вы взорваетесь, вам нужно заключить каждый значение в кавычках:

$thelist = "'". implode("','", $temp) . "'";   

Наконец, в вашем запросе вы передаете $row в предложение IN, вы должны передавать $thelist:

$query = "SELECT count(*) FROM studies WHERE client IN ($thelist) ORDER BY date desc";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);

Так что вообще:

$query1 = "SELECT name FROM clients WHERE sector = '$sectorlink'";
$clientresult = mysql_query($query1, $connection) or trigger_error("SQL", E_USER_ERROR);

while (list($name) = mysql_fetch_row($clientresult)) {

    $temp[] = $name;
}

$thelist = "'". implode("','", $temp) . "'"; 

$query = "SELECT count(*) FROM studies WHERE client IN ($thelist) ORDER BY date desc";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);
0
ответ дан Matt Bridges 25 August 2018 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: