Jump to content
GSForum - Segélyvonal

SQL kérdésem van


google

Recommended Posts

Mezofi

Sziasztok.

A kevetkezõ kérdésbe botlottam:

 

Az id oszloban ilyen adatokat tárolok:

2005/8

2005/9

2005/10

Ez így menne felfelé, ha le tudnám kérdezni melyik a legnagyobb értékkel bíró id.

SELECT MAX(id) FROM proba 

Ez a lekérdezés viszont azt mondja, hogy a 2005/9 a legnagyobb!

Miképp tudom lekérdezni melyik a legnagyobb?

:(

Link to comment
Share on other sites

arpsoft

Ahogy MSN-en már megbeszéltük:

SELECT CONCAT(SUBSTR(id,1,5),LPAD(SUBSTR(id,6,5),5,'0')) AS max_id FROM proba ORDER BY max_id DESC;

 

Az eredmény elsõ sora adja a megoldást, igaz egy kicsit átalakítva az eredeti id-t.

Link to comment
Share on other sites

Mezofi

Szuper! :) Köszi.

Link to comment
Share on other sites

Greene

SQL-t tanulok és nem értem a példát.

 

Le akarom kérdezni azoknak az autóknak a rendszámát, amelyeknek Miskolci a tulajdonosuk.

Ez így írtam le:

 

SELECT rendszam FROM kocsi, ember WHERE ember.id=kocsi.tulaj AND varos LIKE 'Misk%';

 

Na most én cak azt nem értem, hogy az ember.id miért egyenlõ a kocsi.tulajjal. :pislog::upsz:

Link to comment
Share on other sites

google

Azért, mert az ember táblából, és a kocsi táblából is lekérdezel adatot, és értelemszerûen csak azokra a kocsikra van szükséged, amelyeknek tulajdonosa az ember táblából lekérdezett ember.

(Az embernél pedig az id azonosítja egyértelmûen a személyt, hiszen elõfordulhat névegyezés.)

Link to comment
Share on other sites

Mezofi

@Greene

Ha mûködik, és azt kaptad amit szerettél volna, akkor úgy van ahogy Google írta, ha nem azt kaptad amit akartál akkor egy táblázat(adattábla szerkezet) melléklete szükséges lenne, hiszen ennek függvényében lehet csak a megfelelõ lekérdezéseket megszerkeszteni. :D

Egyébként ha ide katintasz találsz egykis segédletet a MySql hez. többek közt a két tábla esetére is.

;)

Link to comment
Share on other sites

Greene

Köszönöm szépen most már értem. Valószínüleg két táblám van, és ezért kell az egyenlõség. Az oldal pedig nagyon jó. ;)

 

Azelött nem te foglalkoztál szilveszteri kellékekkel? Mert rémlik mintha néztem volna az oldaladat akkoriban. :bizonytalan:

Link to comment
Share on other sites

Mezofi

Még most is azzal foglalkozom.

Köszi, mikor idõm van rá, frissítem és bõvítem a tartalmat. :)

Link to comment
Share on other sites

arpsoft

Nem bírom ki, hogy ne írjam le! ;)

 

Greene: két táblád van, az egyikben a tulajdonosok adatai, ebben van a varos mezõ, illetve a kocsi tábla, ahol van egy hivatkozas az ember táblára.

Ezért összekapcsoljuk a két táblát a közös mezõjük alapján.

Lehetett volna join-t is írni:

SELECT rendszam FROM kocsi INNER JOIN ember on ember.id=kocsi.tulaj WHERE varos LIKE 'Misk%';

Az lehet megtévesztõ, hogy a varos mezõ nincs teljesen kiírva, mert a kocsi táblában nincs ilyen mezõ.

Én nem szeretem ezt az írásmódot, mert nem áttekinthetõ. Így írtam volna:

SELECT rendszam FROM kocsi, ember WHERE ember.id=kocsi.tulaj AND ember.varos LIKE 'Misk%';

Link to comment
Share on other sites

  • 4 weeks later...
Mezofi

Sziasztok!

A kérdésem a következõ.

Van 500 sorom a táblában. Megszámoltatom. Generálok egy véletlen számot. És azt szeretném, hogy a véletlenszámnak megfelelõ, (mondjuk 16 a véletlen szám) 16.sor-t töltse be. A gond, hogy a az auto_increment-tel fektöltött táblában sem jönnek a számok egymás után kihagyás nélkül, mert ha törlök eggyet akkor már az a szám kimarad, és ha éppen a 16-ost törlöm akkor hiába jön a véletlen szám.

Tehát gondolom ezt meg tudom oldani tömbbe töltéssel, de ekkora tömböt nem szeretnék töltögetni.

Van valami más megoldás? :D

Link to comment
Share on other sites

arpsoft
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be non-negative integer constants (except when using prepared statements).

 

With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1):

 

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

SELECT blabla FROM blabla_table ORDER BY bla_mezo LIMIT 15,1

1 sort a 16-tól kezdve.

Link to comment
Share on other sites

Mezofi

Igen. Erre van szükségem. Köszi.

:)

Link to comment
Share on other sites

  • 5 months later...
Biszke

Sziasztok!

 

Szeretnék egy online módosítós oldalt készíteni, de az Istennek nem akarja felülírni az adatbázist az új adattal. :(

 

<?php

    include("adatbazis.php");
    
        $h=mysql_query("select * from proba where azon='".$_GET["azon"]."'");
        $tomb=mysql_fetch_array($h);
                
    if(isset($_POST["igen"])){
        $eh=mysql_query("update table user set ar='".$_POST["ar_uj"]."' where azon='".$_POST["nev"]."'");
             
            }
            
?>

<form name="form1" method="post" action="modositas.php">
    <table width="90%" height="40" border="0" align="center">
        <tr>
            <td width="50%" height="30" align="center" valign="middle">Név:</td>
            <td width="50%"><input name="nev" type="text" id="nev" value="<?php print $tomb["nev"]; ?>" disabled="disabled" ></td>
        </tr>
        <tr>
            <td width="50%" height="30" align="center" valign="middle">Ár:</td>
            <td width="50%"><input name="ar_uj" type="text" id="ar_uj" value="<?php print $tomb["ar"]; ?>" ></td>
        </tr>

        <tr>
            <td height="30" colspan="2" align="center" valign="middle"><input type="submit" name="Submit" value="Mentés"><input name="igen" type="hidden" id="igen" value="igen"></td>
        </tr>
    </table>
</form>

 

Mit ronthattam el? :bizonytalan:

Link to comment
Share on other sites

Greene

$eh=mysql_query("UPDATE user SET ar='".$_POST["ar_uj"]."' WHERE azon='".$_POST["nev"]."'"); 

 

A table-t kivettem, mert ahogy látom az nem kell bele.

 

Egyébként SQL hibát ír az oldal?

 

Egyébként én az egészet egy php kódba ültettem volna bele a helyedben. Az elejére rakok egy global $HTTP_POST_VARS-t, és simán megy.

 

 

Link to comment
Share on other sites

Kiskalóz

Nem ir ki hibát. Nem írja felül az adatot.

Link to comment
Share on other sites

Greene

Hát ha egy kicsit pontosabb képet kapnék az adatbázis szerkezetéről, akkor többet tudnék mondani.

 

Bár én a HTML kód egy részét sem értem, hogy miért úgy van. :upsz:

Miért kell egy külön html cucc amiben benne van, hogy "igen" az érték, amit aztán beolvasunk? Miért nem csinálunk egy vizsgálatot, hogy létezik-e a Submit változó (megnyomtuk-e a gombot)? Ha nincs akkor megszakítjuk a program futását...

if(!$Submit) exit;

 

Ja és nem is nyitsz meg adatbázist...így nem fog menni a lekérdezés.

 

$file=mysql_connect("localhost","username","password");

mysql_select_db("adatbazis");

Link to comment
Share on other sites

Kiskalóz

adatbázis megnyitás benne van. (include adadtazis.php)

 

Greene:

Jobb lene ha átküldeném a teljes file-t?

Link to comment
Share on other sites

Greene

Küldd át, de adj fél órát, mert most van egy kis dolgom.

Link to comment
Share on other sites

Mezofi

@Biszke

<?php
include("adatbazis.php");

$h=mysql_query("SELECT * FROM proba WHERE azon='".$_GET["azon"]."'");
$tomb=mysql_fetch_array($h);
                
if(isset($_POST["igen"]) && trim($_POST["ar_uj"]) !=="" && trim($_POST["nev"]) !==""){
$ar=trim($_POST["ar_uj"]);
$azon=trim($_POST["nev"]);
//Feltétele a betöltésnek, hogy legyen ilyen tábla név az adatbázisban, hogy "table nev", és
//legyen olyan oszlop, hogy "azon". Az azon oszlopnak pedig olyan sora ahol a tartalma megeggyezik
//a $_POST["nev"] tartalmával.
// Inkább valami más név kellen pl: user
//Mert az üres karakter is megzavarhatja a mysql-t a tábla nevében!
//Arra nem is merek gondolni, hogy már most is ez a neve, és csak azért raktad oda a "table"-szót
//Mert azt gondoltad, hogy úgy jó!
$eredmeny=mysql_query("UPDATE table user SET ar='$ar' where azon='$azon' ");

if($eredmeny){
print("Sikerült");
}else{
print("Nincs ilyen tábla");
}
            }
            
?>

<form name="form1" method="post" action="modositas.php">
    <table width="90%" height="40" border="0" align="center">
        <tr>
            <td width="50%" height="30" align="center" valign="middle">Név:</td>
            <td width="50%">
            <input name="nev" type="text" id="nev" value="<?php print $tomb["nev"]; ?>" disabled="disabled" /></td>
        </tr>
        <tr>
            <td width="50%" height="30" align="center" valign="middle">Ár:</td>
            <td width="50%">
            <input name="ar_uj" type="text" id="ar_uj" value="<?php print $tomb["ar"]; ?>" /></td>
        </tr>

        <tr>
     <td height="30" colspan="2" align="center" valign="middle">
     <input type="submit" name="Submit" value="Mentés">
     <input name="igen" type="hidden" id="igen" value="igen"></td>
        </tr>
    </table>
</form>

:)

Link to comment
Share on other sites

Kiskalóz

Na ezt én már végképp nem értem.

Egyébként így sem akar müködni.

 

Ez a kód szépen behivja az adatokat az adatbázisból, és megjeleniti a form-ba.

    include("adatbazis.php");
            $h=mysql_query("select * from users where azon='".$_GET["azon"]."'");
        $tomb=mysql_fetch_array($h);
        

 

Ha bármit árírok a form-ban, akkor elméletileg, ez a kód feülirja az adatbázis megfelelõ sorát.

        if(isset($_POST["igen"])){
             $eh=mysql_query("UPDATE users SET fizetes='".$_POST["fizetes2"]."' where nev='".$_POST["nev2"]."'");
            header("Location:index.php");
                 }

 

Ha kiveszem a where feltételt, akkor szépen be is írja, csak minden felhasználónak.

 

@Mezofi:

Nekem az a kód sem müködött, amit Te adtál.

Link to comment
Share on other sites

Mezofi

Mi ebbõl a tanulság?

 

Az hogy nincs a táblában olyan azonosító mint ami érkezik a POST-al!

where nev='".$_POST["nev2"]."'");

Tehát vagy nincs a táblában nev nevü oszlop, vagy a $_POST["nev2"] tartalma nem egyezik meg a nev-nevü oszlop egyik mezõjével sem.

Az UPDATE elé rakj be egy print("Ezt kell keresnem az users nevü tábla nev oszlopában=".$_POST["nev2"] );

 

Ez szépen kiírja neked, hogy mit kell keresned. Megnyitod a phpmyadmin-t, és megnézed, hogyha neked kéne beillesztened akkor megtalálnád-e?

 

Szerintem ezután megtalálod a hibát.

:)

Link to comment
Share on other sites

Kiskalóz

Megoldódott.

 

Minden jó volt 1 dolgot kivéve. A form-ba a nev2 mezõ le volt tiltva, hogy azt ne lehessen megváltoztatni. Amint kiszedetem a form tiltást, hibátlanul müködött.

Link to comment
Share on other sites

Mezofi
Az UPDATE elé rakj be egy print("Ezt kell keresnem az users nevü tábla nev oszlopában=".$_POST["nev2"] );

 

Ezzel a sorral pedig egybõl láttad volna, hogy hiba van a POST értékében.

:D

Link to comment
Share on other sites

Kiskalóz

Köszönöm a segítséget :)

 

Egyébként arra sorra hibát irt ki nekem.

 

De akkor most menjünk tovább.

 

Ha azt akarom, hogy a nevet ne lehessen módosítani akkor nem form-ba rakom. De ekkor nem is megy el POST-on az adat.

Tehát elõtte csináltam belõlle egy változót.

 

<?php
    $nev = $tomb["nev"];
    
?>

 

Ekkor így alakult a módosító sorom:

if(isset($_POST["igen"])){
             $eh=mysql_query("UPDATE users SET fizetes='".$_POST["fizetes2"]."' where nev='$nev'");
            header("Location:index.php");
                 }

De ez valamiért nem mûködik. :)

 

 

Fél óra múlva:

Megoldottam. Beleraktam egy rejtett form-ba a név részét:

 

<input name="nev2" type="hidden" id="nev2" value="<?php print $tomb["nev"]; ?>">

 

így nem lehet megváltoztatni, és név alapján azonosítja.

Link to comment
Share on other sites

Kiskalóz

Na most megint elakadtam.

 

Ha 1nél több adatot teszek bele változtatni akkor nem ir át semmit.

 

$eh=mysql_query("UPDATE users SET fizetes='".$_POST["fizetes2"]."' eletkor='".$_POST["eletkor2"]."' where azon='".$_POST["azon"]."'");

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...