Jump to content



SQL - αναφορά σε στήλη χωρίς το όνομά της


neuromancer

Recommended Posts

Υπάρχει τρόπος να αναφερθώ σε μια στήλη ενός πίνακα χωρίς να

χρησιμοποιήσω το όνομα της στήλης?

Θυμάμαι σε Delphi/Paradox έγραφες mytable.fields[0] και εννοούσες

την πρώτη στήλη του πίνακα.

Έχει κάτι αντίστοιχο σε SQLi ή σε PDO;

(php/myslq ειναι το σκηνικό)

Link to comment
Share on other sites

Με αυτό εδώ μπορείς να μάθεις το όνομα της πρώτης στήλης δεδομένου πίνακα δεδομένης database.

SELECT column_name

FROM information_schema.columns

WHERE table_schema='myDatabase' AND table_name='myTable' AND ordinal_position=1;

Δε βολεύει βέβαια....

Link to comment
Share on other sites

Γιατί θες να το κάνεις αυτό ?

Μια ιδέα είναι να κάνεις declare τα colums στο php script σου και να τα καλείς με άλλο όνομα αν αυτός είναι ο σκοπός σου ( δεν βρίσκω χρήση για αυτό αλλά τέσπα ).

Dynamic SQL δεν θες να χρησιμοποιήσεις φαντάζομαι.

Link to comment
Share on other sites

Θέλω να γεμίζω μια λίστα με data από δίστηλο πίνακα αλλά θέλω να δουλεύει ασχέτως του ποιος είναι ο πίνακας και πώς λέγονται οι 2 στήλες του. Θέλω π.χ. να κάνω ordering στη δευτερη στήλη.

Λογικά τώρα θα παραδεχτείς ότι έχει χρησιμότητα! :upside:

Link to comment
Share on other sites

Το πάλεψα αλλιώς τελικά, θυσιάζοντας το ordering. Η PDO library δίνει comumn reference με αριθμητικό index (0-based) εκτός από associative τρόπο.

$record = $statement->fetch()

$record[0] ειναι η πρώτη στήλη, $record[1] ειναι η 2η, κ.ο.κ.

Γινεται και full ότι ήθελα μεσω information schema αλλά θέλω να το κρατήσω as minimal and simple as possible.

Link to comment
Share on other sites

SELECT * για όλα τα columns που έχει ένα table.Kαι μετά στο resultset ή dataset χρησιμοποιείς το ordinal position


<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM Persons");

while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}

mysqli_close($con);
?>

Στο παραπάνω παράδειγμα αντι για αυτό

echo $row['FirstName'] . " " . $row['LastName'];

κάνεις αυτό

echo $row[0] . " " . $row[1];
Link to comment
Share on other sites

Πιθανότατα να το κάνει με τον τρόπο που είπες, αλλά δε γνωρίζω SQLi/PDO για να σου πω. Η πιό απλή λύση, που δουλεύει ανεξαρτήτως γλώσσας είναι:

Select book_name as Col1, book_author as Col2 From table_books;

Έτσι, κάθε φορά διαβάζεις στον κώδικά σου τα πεδία Col1, Col2 άσχετα με τον πίνακα που παίρνεις δεδομένα.

Link to comment
Share on other sites

O nucleus είπε σε SQLi αυτό που είπα πιο πριν σε PDO.

Wizard στο SQL σου χρησιμοποιείς ονόματα πεδίων κάτι το οποίο

δεν είναι γνωστό γιατί ο πίνακας περνιέται παραμετρικά.

θα βόλευε αν η SQL είχε κάτι σαν mytable.column[0] για να αναφερθείς στην πρώτη στήλη του πίνακα mytable.

Γενικά το πρόβλημα δεν είναι στην PHP καθώς PDO και SQLi καλύπτουν, εφόσον εκτελεστεί το query.

Το πρόβλημα είναι στο να διατυπώσεις ένα SQL ερώτημα για δεδομένο τύπο πινάκων, ξέροντας μόνο το όνομα του πίνακα.

Link to comment
Share on other sites

Το πρόβλημα είναι στο να διατυπώσεις ένα SQL ερώτημα για δεδομένο τύπο πινάκων, ξέροντας μόνο το όνομα του πίνακα.

To θέμα είναι κάπως να αντιστοιχίσεις τα column names με ένα "index".

Μπορείς να κάνεις αυτό

SELECT column_name,ordinal_position

FROM information_schema.columns

WHERE table_schema='myDatabase' AND table_name='myTable'

Μετά βάλτα σε ένα array ή σε κάποια δομή του τύπου Key-Value πχ ordinal_positionToColumn_NameMapper με key το ordinal_position και value το column_name.

Μετά μπορείς να γράφεις τα sql statements σου με String.format ή συνένωση ή όποιον άλλον τρόπο θέλεις χρησιμοποιώντας κάτι αυτής της μορφής SELECT ordinal_positionToColumn_NameMapper[1] WHERE ordinal_positionToColumn_NameMapper[2] = 'test'.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.