fetch ja useiden muuttujien tulostaminen sql-kyselyyn

Miten saan käytettyä useita haettuja muuttujiksi haettuja table sql-kyselyissä, kun väliin tarvittaisiin AND:ia?

Esim: SELECT henkilö FROM perussivut WHERE henkilö != '$henkp'..... Ei tietenkään toimi, koska $henkp:ssä on useita henkilöitä. Miten saan tehtyä vastaavan kyselyn fetchatuilla tablen arvoilla?

Hakukoodini on tällainen:

      if(!$kyselyala = mysql_query("SELECT * FROM henkilöt WHERE layer = 2 AND tyyppi = 'toimistohenkilö'"))
      {
         print "Haku epäonnistui. Virhe:" . mysql_error();
      }else{
            while ($row = mysql_fetch_array($kyselyala)) {
            
               $henkp = $row['henk'];
   
            }
      }
8520
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

Eli siis.. yrität ensiksi hakea yhdellä kyselyllä listaa henkilöistä ja sitten tehdä toisen kyselyn, johon nämä henkilöt ei tule mukaan?

Todennäköisesti järkevintähän olisi tehdä tuo yhdellä kyselyllä. Tuon kyselyn tekeminen vaatisikin sitten hieman ajattelua ja todennäköisesti yritysta ja erehdystä sitäkin enemmän. Todennäköisesti onnistuu LEFT tai RIGHT JOIN:lla.


Pikaratkaisuna toimisi kuitenkin varmaan joku seuraavan tapainen:

if(!$kyselyala = mysql_query("SELECT * FROM henkilöt WHERE layer = 2 AND tyyppi = 'toimistohenkilö'"))
{
print "Haku epäonnistui. Virhe:" . mysql_error();
}else{
while ($row = mysql_fetch_array($kyselyala)) {

$henkp[] = $row['ID'];

}

$query = "SELECT henkilö FROM perussivut WHERE henkilö NOT IN (";

foreach ($henkp as $arvo)
{

if ($lisaaPilkku) $query .= ", ";
$query .= "'" . $arvo . "'";
$lisaaPilkku = true;

}

$query .= ") ORDER BY sarake";

echo $query;

}

Jos kaikki meni oikein, tuosta tulee vastauksena jotain tyyliin: SELECT henkilö FROM perussivut WHERE henkilö NOT IN ('matti', 'seppo', 'timo') ORDER BY sarake

Äänestä
  • Kiitos. Juuri tätä vastausta etsin.

    Äänestä

  • Tomppa5435 kirjoitti:

    Kiitos. Juuri tätä vastausta etsin.

    Minulla on tietoa useammissa tableissa. Onko kysleyä mahdollista muuttaa niin, että siihen saa haettua tietoa useammasta tablesta?

    Tällä hetkellä saan tällaisen virheilmoituksen:

    Column 'sivu' in where clause is ambiguous

    Äänestä

select henkilö from perussivut where henkilö not in (select henk from henkilöt where layer = 2 and tyyppi = 'toimistohenkilö')

Äänestä
  • Toimivatko sub-queryt mysql:ssä?

    Äänestä

  • hmmm? kirjoitti:

    Toimivatko sub-queryt mysql:ssä?

    jep

    Äänestä

  • gffgf kirjoitti:

    jep

    Eipä toimi ainakaan omassa mysql-versiossani.

    Äänestä

  • 122121 kirjoitti:

    Eipä toimi ainakaan omassa mysql-versiossani.

    Kannattaisiko siis ehkä päivittää

    Äänestä

Kommentoi aloitusta


Tomppa234 kirjoitti:

Miten saan käytettyä useita haettuja muuttujiksi haettuja table sql-kyselyissä, kun väliin tarvittaisiin AND:ia?

Esim: SELECT henkilö FROM perussivut WHERE henkilö != '$henkp'..... Ei tietenkään toimi, koska $henkp:ssä on useita henkilöitä. Miten saan tehtyä vastaavan kyselyn fetchatuilla tablen arvoilla?

Hakukoodini on tällainen:

      if(!$kyselyala = mysql_query("SELECT * FROM henkilöt WHERE layer = 2 AND tyyppi = 'toimistohenkilö'"))
      {
         print "Haku epäonnistui. Virhe:" . mysql_error();
      }else{
            while ($row = mysql_fetch_array($kyselyala)) {
            
               $henkp = $row['henk'];
   
            }
      }

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu